rsj0315 发表于 2023-10-28 13:02:01

想让列1的d和e依然保持原有的数据4和5

想让列1的d和e依然保持原有的数据4和5,这个应该如何修改呢?
目前结果是给置成null了

import pandas as pd

# 创建df1
data1 = {'列1': ['a', 'b', 'c', 'd', 'e'],
         '列2': }
df1 = pd.DataFrame(data1)

# 创建df2
data2 = {'code': ['a', 'b', 'c'],
         'num': }
df2 = pd.DataFrame(data2)
print(df1)
print('--------')
print(df2)
print('-------------')
df1['列2'] = df1['列1'].map(df2.set_index('code')['num'])
print(df1)

isdkz 发表于 2023-10-28 13:02:10

你可以使用 map 函数来实现保持列1的d和e的原始数据为4和5。目前结果是将它们置为了null是因为在 map 函数中,如果没有匹配的值,返回的是null。

要解决这个问题,你可以使用 fillna 函数来将null值替换为原始的数据。下面是修改后的代码:

import pandas as pd

# 创建df1
data1 = {'列1': ['a', 'b', 'c', 'd', 'e'],
         '列2': }
df1 = pd.DataFrame(data1)

# 创建df2
data2 = {'code': ['a', 'b', 'c'],
         'num': }
df2 = pd.DataFrame(data2)
print(df1)
print('--------')
print(df2)
print('-------------')
df1['列2'] = df1['列1'].map(df2.set_index('code')['num']).fillna(df1['列2'])
print(df1)


这样,列1的d和e的值将保持为原始的数据4和5。

陶远航 发表于 2023-10-28 13:02:37

你的代码将df1的'列2'完全替换为df1的'列1'在df2中的对应值。对于df1的'列1'中的'd'和'e',因为在df2中找不到对应的值,所以被替换为null。

如果你想保持'd'和'e'在'列2'中的原始值,你可以使用Pandas的update函数,而不是直接替换。update函数只会更新找到的值,对于找不到的值,会保持原始值不变。以下是修改后的代码:

import pandas as pd

# 创建df1
data1 = {'列1': ['a', 'b', 'c', 'd', 'e'], '列2': }
df1 = pd.DataFrame(data1)

# 创建df2
data2 = {'code': ['a', 'b', 'c'], 'num': }
df2 = pd.DataFrame(data2)

# 创建一个新的Series,将df1的'列1'映射到df2的'num'
s = df1['列1'].map(df2.set_index('code')['num'])

# 使用update函数更新df1的'列2'
df1['列2'].update(s)

print(df1)


这样,'列2'中的'd'和'e'的值就会保持为4和5,而不会被替换为null。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 想让列1的d和e依然保持原有的数据4和5