如何在Python中将双列CSV文件转换为字典

3

我有以下csv文件:

Name1    Name2

JSMITH    J Smith
ASMITH    A Smith

我如何将其读入字典,以便输出是
dict = {'JSMITH':'J Smith', 'ASMITH': 'A Smith'}

我使用过:

df= pd.read_csv('data.csv')

data_dict = df.to_dict(orient='list')

但是这给了我

{'Name1': ['JSMITH','ASMITH'],'Name2': ['J Smith', 'A Smith']}

我希望将其用于 pandasmap 函数中,例如:
df2['Name'] = df2['Name'].replace(data_dict, regex=True)

非常感谢您的帮助!

2个回答

3

如果你的表格始终只有两列,可以使用以下技巧:

dict(df.itertuples(False,None))

或者将其转换为 pandas.Series,并使用 to_dict:
df.set_index("Name1")["Name2"].to_dict()

输出:

{'ASMITH': 'A Smith', 'JSMITH': 'J Smith'}

请注意,如果您需要将映射器用于 pd.Series.replace,则 Seriesdict 一样有效。
s = df.set_index("Name1")["Name2"]
df["Name1"].replace(s, regex=True)

0    J Smith
1    A Smith
Name: Name1, dtype: object

这也意味着您可以删除 to_dict 并减少一些开销:
large_df = df.sample(n=100000, replace=True)

%timeit large_df.set_index("Name1")["Name2"]
# 4.76 ms ± 1.09 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit large_df.set_index("Name1")["Name2"].to_dict()
# 20.2 ms ± 976 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

啊,好的。非常感谢!那你的意思是我可以使用df2['Name'] = df2['Name'].replace(series, regex=True)吗? - SOK
@SOK,我添加了一些示例来进行演示 ;) - Chris

0
你可以使用 zipdict
dict(zip(df.Name1, df.Name2))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接