Pandas多列同名

时间:2016-10-11 21:19:43

标签: python python-2.7 csv pandas

我正在dataframe创建一个csv。我已经通过文档,多个SO帖子,链接,因为我刚开始Pandas但没有得到它。 csv有多个具有相同名称的列,如a

所以在形成dataframe后,当我df['a']时,它会返回哪个值?它不会返回所有值。

同样只有一个值会有一个字符串,它将是None。我怎样才能获得该列?

3 个答案:

答案 0 :(得分:6)

相关参数为mangle_dupe_cols

来自docs

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

默认情况下,您的所有'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

enter image description here

df.filter(like='a')

enter image description here

答案 1 :(得分:1)

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

  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

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

答案 2 :(得分:0)

我有一个类似的问题,不是由于从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'来获得我想要的列。