Python 熊猫地图 CSV 文件
Posted
技术标签:
【中文标题】Python 熊猫地图 CSV 文件【英文标题】:Python pandas map CSV file 【发布时间】:2018-05-28 21:23:28 【问题描述】:我想“合并”两个 CSV 文件。我想映射文件 1 中的电子邮件并从文件 2 中获取它们各自的用户 ID,然后我想将其分配给文件 1 的相应电子邮件
例子:
文件 1
name, userId, email
john, null, john@a.com
alex, null, alex@a.com
micheal, null, mike@a.com
alex, null, alex@a.com
john, null, john@a.com
文件 2
name, userId, email
alex, 5, alex@a.com
micheal, 10, mike@a.com
john, 12, john@a.com
输出文件
name, userId, email
john, 12, john@a.com
alex, 5, alex@a.com
micheal, 10, mike@a.com
alex, 5, alex@a.com
john, 12, john@a.com
这是我的代码,但这并没有分配相应电子邮件的 userId,因为电子邮件没有排序
import pandas as pd
df1 = pd.read_csv("file1.csv", sep=",")
df2 = pd.read_csv("file2.csv", sep=",", index_col=0)
df1["userId"] = df2["userId"].values
df1.to_csv("output.csv", sep=";")
谁能帮帮我?
【问题讨论】:
Dataframe.join 是您要查找的内容:pandas.pydata.org/pandas-docs/stable/generated/… 【参考方案1】:Dataframe.merge
df1 = pd.read_csv("file1.csv", sep=",")
df1.columns = ['name', 'userid', 'email']
df2 = pd.read_csv("file2.csv", sep=",", index_col=0)
df1 = df1.drop(['userId'], axis=1)
result = pd.merge(df1, df2, on=['name','email'], how='right')
result.to_csv("output.csv", sep=";")
我是如何测试的:
import pandas as pd
df1 = pd.DataFrame('name': ['john', 'alex', 'michael', 'alex', 'john'],
'userId': ['null', 'null', 'null', 'null', 'null'],
'email': ['john@a.com', 'alex@a.com', 'mike@a.com', 'alex@a.com', 'john@a.com']
, columns=['name','userId','email'])
df2 = pd.DataFrame('name': ['alex', 'michael', 'john'],
'userId': ['5', '10', '12'],
'email': ['alex@a.com', 'mike@a.com', 'john@a.com']
)
df1 = df1.drop(['userId'], axis=1)
result = pd.merge(df1, df2, on=['name','email'], how='right')
print(df1)
print(df2)
print(result)
【讨论】:
我没有得到预期的输出,你能试试吗? 切换到合并方法,希望对你有用!将how='outer'
更改为 how='inner'
以获取仅长度为 df2 的列表。【参考方案2】:
所以我认为如果你从文件 1 中删除用户 ID 字段并从文件 2 中删除名称。然后合并电子邮件地址上的两个数据框,你应该得到 p>
【讨论】:
以上是关于Python 熊猫地图 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
Python:使用熊猫从csv文件中提取特定列(包含特殊字符)