熊猫合并如何避免未命名的列

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列...

【讨论】:

以上是关于熊猫合并如何避免未命名的列的主要内容,如果未能解决你的问题,请参考以下文章

重命名未命名的列熊猫数据框

我应该如何使用熊猫读取没有“未命名”行的 csv 文件? [复制]

如何合并/组合熊猫中的列?

如何使用列表重命名熊猫中的列

如何将外观相似的列合并为一个并在熊猫中为其分配名称?

将分组的聚合唯一列添加到熊猫数据框