我有两个csv文件lookup.csv和data.csv。我正在转换lookup.csv作为字典,需要添加新的列在data.csv的基础上列。
输入:
lookup.csv
data.csv
101 NYC 1
202 DC 2
预期产出:
data.csv
col1 col2 col3 col4
101 NYC 1 first
202 DC 2 second
...
在这里,对于第一行,新列col4的值是第一个,因为col3的值是1,并且它在lookup.csv中的对应值是第一个。
我尝试了下面的逻辑,但在这里失败:
df = pd.read_csv("lookup.csv",header=None, index_col=0, squeeze=True).to_dict()
df1 = pd.read_csv("data.csv")
df1['col4'] = df.get(df1['col3'])
Error: TypeError: unhashable type: 'Series'
有人能帮助解决这个问题吗?
3条答案
按热度按时间roqulrg31#
首先,
squeeze=True
导致pd.read_csv
返回一个序列,而不是 Dataframe read_csv docs(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html),这就是为什么会出现unhashable type series错误。其次,您可以只对 Dataframe 进行merge或连接,而不是将其转换为字典,这取决于共享键是列还是索引。
vnjpjtjt2#
get
方法需要可哈希键(即单个值),但df1['col3']
是Series
对象。请尝试apply
方法:输出:
nnsrf1az3#
你也可以用Pandas
merge
的方法。如果查找.csv为:
数据.csv为:
然后将每个csv读入 Dataframe
并将以下单个代码行与
merge
一起使用(将使用公共列名):查看结果: