熊猫合并如何避免未命名的列
Posted
技术标签:
【中文标题】熊猫合并如何避免未命名的列【英文标题】:Pandas merge how to avoid unnamed column 【发布时间】:2017-04-26 12:54:25 【问题描述】:我要合并两个 DataFrame:
DataFrame A columns: index, userid, locale (2000 rows)
DataFrame B columns: index, userid, age (300 rows)
当我执行以下操作时:
pd.merge(A, B, on='userid', how='outer')
我得到了一个包含以下列的 DataFrame:
索引、未命名:0、用户 ID、语言环境、年龄
index
列和 Unnamed:0
列是相同的。我猜Unnamed:0
列是DataFrame B 的索引列。
我的问题是:在合并两个 DF 时,有没有办法避免 Unnamed
列?
之后我可以删除Unnamed
列,但只是想知道是否有更好的方法。
【问题讨论】:
你试过设置 index = False 吗?这里有一个很好的讨论:***.com/questions/36519086/… @datawrestler 合并没有索引参数。 (to_csv 有但不合并) 对,但是如果你在读取每个 DF 时设置标志然后合并可能会这样做 你能分享一个数据集的样本和用于合并的代码吗?我相信我们可以找到解决方案! @Cheng,我只能查看 Pandas 版本 0.7.0 - 它已经有index
参数 - pandas.pydata.org/pandas-docs/version/0.7.0/generated/…
【参考方案1】:
总而言之,您所做的是将索引保存到文件中,当您从文件中读回时,先前保存为 index
的列将作为常规列加载。
有几种方法可以解决这个问题:
方法一
将pandas.DataFrame
保存到磁盘时,请像这样使用index=False
:
df.to_csv(path, index=False)
方法二
从文件读取时,可以定义要用作索引的列,如下所示:
df = pd.read_csv(path, index_col='index')
方法三
如果方法 #2 由于某种原因不适合您,您可以随时将列设置为稍后用作索引,如下所示:
df.set_index('index', inplace=True)
此时,您的数据名应如下所示:
userid locale age
index
0 A1092 EN-US 31
1 B9032 SV-SE 23
我希望这会有所帮助。
【讨论】:
【参考方案2】:将 DataFrame 保存到 CSV 文件 (df.to_csv('...', index=False)
) 时不要写入索引,或者如果您必须处理无法更改/编辑的 CSV 文件,请使用 usecols
参数:
A = pd.read_csv('/path/to/fileA.csv', usecols=['userid','locale'])
为了摆脱Unnamed:0
列...
【讨论】:
以上是关于熊猫合并如何避免未命名的列的主要内容,如果未能解决你的问题,请参考以下文章