提问人:Xara 提问时间:11/12/2023 最后编辑:Xara 更新时间:11/12/2023 访问量:68
使用 python [duplicate] 在 2 个 CSV 文件中查找相等值
finding equal values in 2 CSV files with python [duplicate]
问:
我有 2 个 excel 文件,每个文件包含 2 列,如下所示:
文件1:
name price
a 1
b 78
f 54
g 32
t 2
文件2:
name price
f 4
x 23
e 76
a 4
o 0
我想读取和搜索 name 等于 name 的值并提取价格,然后将它们写在 的价格列中。file1
file2
file1
file2
file2
应如下所示:
文件2:
name price
f 54
x 23
e 76
a 1
o 0
我已经尝试了以下方法(我已将 excel 文件保存为 CSV):
import pandas as pd
import numpy as np
df1 = pd.DataFrame(pd.read_csv('file1.csv'))
df2 = pd.DataFrame(pd.read_csv('file2.csv'))
if(df1[name] in df2[name]):
df2[price] = df1[price]
df2.to_csv('file2.csv')
答:
0赞
gtomer
11/12/2023
#1
您需要先合并:
df2 = df2.merge(df1, on='name', how='left')
然后你可以使用 np.where:
import numpy as np
df2['price'] = np.where(df2['price_y'].isnull(), df2['price_x'], df2['price_y'])
稍后,您可以删除合并的列:
df2.drop(columns=['price_x', 'price_y'], inplace=True)
结果如下:
name price
f 54
x 23
e 76
a 1
o 0
0赞
Panda Kim
11/12/2023
#2
法典
用combine_first
df1.set_index('name').combine_first(df2.set_index('name'))\
.reindex(df2['name']).reset_index()
似乎提问者不了解熊猫,所以我将输出结果作为图像附上。inplace
其他方式:使用concat
& groupby
+ last
pd.concat([df2, df1]).groupby('name').last()\
.reindex(df2['name']).reset_index()
相同的结果
其他方式:merge
& pop
df2.merge(df1, on='name', how='left', suffixes=['1', ''])\
.assign(price=lambda x: x['price'].fillna(x.pop('price1')).astype('int'))
相同的结果
示例代码
import pandas as pd
import io
file1 = '''name price
a 1
b 78
f 54
g 32
t 2
'''
file2 = '''name price
f 4
x 23
e 76
a 4
o 0
'''
df1 = pd.read_csv(io.StringIO(file1), sep='\s+')
df2 = pd.read_csv(io.StringIO(file2), sep='\s+')
上一个:季度箱形图与月份之和 [复制]
下一个:单通道队列系统仿真
评论
pd.read_csv
pd.DataFrame
pd.read_csv