【问题标题】:Python Pandas: how to update a csv file from another csv filePython Pandas:如何从另一个 csv 文件更新 csv 文件
【发布时间】:2015-04-13 14:32:16
【问题描述】:

我们有两个 CSV 文件:a.csvb.csv

a.csv 具有树列:labelitem1item2b.csv 有两列:item1item2。如果a.csv中的item1item2也出现在b.csv中,那就是a.csvb.csv具有相同的item1item2a.csv 中 label 的值应该改为 1。如何使用pandas进行交易?


例如:

a.csv:

label    item1     item2
 0         123       35
 0         342       721
 0         876       243

b.csv:

item1     item2
 12        35
 32        721
 876       243

result.csv:

label    item1     item2
 0         123       35
 0         342       721
 1         876       243

我试过了,但它不起作用:

import pandas as pd

df1 = pd.read_csv("~/train_dataset.csv", names=['label', 'user_id', 'item_id', 'behavior_type', 'user_geohash', 'item_category', 'time','sales'], parse_dates=True)
df2 = pd.read_csv(~/train_user.csv", names=['user_id', 'item_id', 'behavior_type', 'user_geohash', 'item_category', 'time', 'sales'], parse_dates=True)
df1.loc[(df1['user_id'] == df2['user_id'])& (df1['item_id'] == df2['item_id']), 'label'] = 1

【问题讨论】:

  • 两个csv文件中的项目是否必须位于同一行,或者a.csv中的给定行是否可以出现在b.csv中的任何位置?

标签: python csv pandas


【解决方案1】:

您可以使用 loc 和一个布尔条件来屏蔽您的 df(这里表示 a.csv),如果满足该条件,则将标签设置为 1:

In [18]:

df.loc[(df['item1'] == df1['item1'])& (df['item2'] == df1['item2']), 'label'] = 1
df
Out[18]:
   label  item1  item2
0      0    123     35
1      0    342    721
2      1    876    243

如果你想设置所有行值,你可以使用np.where:

In [19]:

np.where((df['item1'] == df1['item1'])& (df['item2'] == df1['item2']), 1, 0)
Out[19]:
array([0, 0, 1])
In [20]:

df['label'] = np.where((df['item1'] == df1['item1'])& (df['item2'] == df1['item2']), 1, 0)
df
Out[20]:
   label  item1  item2
0      0    123     35
1      0    342    721
2      1    876    243

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2021-10-19
    • 2022-01-04
    • 2020-05-05
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多