繁体   English   中英

Pandas 中的多个同名列

[英]Multiple columns with the same name in Pandas

我正在从 CSV 文件创建dataframe 我已经浏览了文档、多个 SO 帖子、链接,因为我刚刚开始使用 Pandas 但没有得到它。 CSV文件有多个列有相同的名字说a

那么在形成dataframe ,当我执行df['a']它会返回哪个值? 它不会返回所有值。

此外,只有一个值会有一个字符串 rest 是None 我怎样才能得到那个专栏?

相关参数是mangle_dupe_cols

文档

mangle_dupe_cols : boolean, default True Duplicate columns will be specified as 'X.0'...'X.N', rather than 'X'...'X'

默认情况下,您'a'所有'a'列都命名为'a.0'...'a.N' ,如上所述。

如果您使用mangle_dupe_cols=False ,则导入此csv会产生错误。

你可以得到你所有的列

df.filter(like='a')

示范

from StringIO import StringIO
import pandas as pd

txt = """a, a, a, b, c, d
1, 2, 3, 4, 5, 6
7, 8, 9, 10, 11, 12"""

df = pd.read_csv(StringIO(txt), skipinitialspace=True)
df

在此处输入图片说明

df.filter(like='a')

在此处输入图片说明

我有一个类似的问题,不是因为从 csv 读取,而是我有多个同名的 df 列(在我的例子中是“id”)。 我通过获取 df.columns 并使用列表重置列名来解决它。

In : df.columns
Out: 
Index(['success', 'created', 'id', 'errors', 'id'], dtype='object')

In : df.columns = ['success', 'created', 'id1', 'errors', 'id2']

In : df.columns
Out: 
Index(['success', 'created', 'id1', 'errors', 'id2'], dtype='object')

从这里开始,我可以调用“id1”或“id2”来获取我想要的列。

这就是我通常对我的基因表达数据集所做的,因为相同基因的基因序列略有不同,所以相同的基因名称可能会出现多次:

  1. 在我的数据框中创建一个重复列的列表(指的是出现多次的列名):
duplicated_columns_list = []
list_of_all_columns = list(df.columns)
for column in list_of_all_columns:
    if list_of_all_columns.count(column) > 1 and not column in duplicated_columns_list:
        duplicated_columns_list.append(column)
duplicated_columns_list
  1. 使用函数.index()帮助我找到在每次迭代中重复的第一个元素并给它下划线:
for column in duplicated_columns_list:
    list_of_all_columns[list_of_all_columns.index(column)] = column + '_1'
    list_of_all_columns[list_of_all_columns.index(column)] = column + '_2'

这个for循环帮助我强调所有重复的列,现在每列都有一个不同的名称。

此特定代码与恰好出现 2 次的列相关,但可以针对在数据框中出现甚至超过 2 次的列进行修改。

  1. 最后,使用下划线元素重命名列:

df.columns = list_of_all_columns

就是这样,我希望它有帮助:)

与 JDenman6 类似(并与您的问题相关),我有两个同名的 df 列(名为“id”)。 因此,调用

df['id']

返回 2 列。 您可以使用

df.iloc[:,ind]

其中ind对应于列的索引,具体取决于它们在 df 中的排序方式。 您可以使用以下方法找到索引:

indices = [i for i,x in enumerate(df.columns) if x == 'id']

用您要搜索的列的名称替换“id”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM