Python 熊猫中具有相同名称的多个列

Python 熊猫中具有相同名称的多个列,python,python-2.7,csv,pandas,Python,Python 2.7,Csv,Pandas,我正在从CSV文件创建一个dataframe。我已经通过了文件,多个SO帖子,链接,因为我刚刚开始熊猫,但没有得到它。CSV文件有多个同名列,例如a 所以在形成dataframe之后,当我执行df['a']时,它将返回哪个值?它不会返回所有值 此外,只有一个值具有字符串,其余值为None。如何获取该列?相关参数为mangle\u dupe\u cols 从 默认情况下,您的所有'a'列都将按照上面的指定命名为'a.0'…'a.N' 如果使用了mangle\u dupe\u cols=False,

我正在从CSV文件创建一个
dataframe
。我已经通过了文件,多个SO帖子,链接,因为我刚刚开始熊猫,但没有得到它。CSV文件有多个同名列,例如
a

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


此外,只有一个值具有字符串,其余值为
None
。如何获取该列?

相关参数为
mangle\u dupe\u cols

默认情况下,您的所有
'a'
列都将按照上面的指定命名为
'a.0'…'a.N'

如果使用了
mangle\u dupe\u cols=False
,则导入此
csv
将产生错误

您可以使用

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'来获得我想要的列。

这是我通常使用我的基因表达数据集所做的,因为同一基因的基因序列稍有不同,相同的基因名称可以出现多次:

  • 在my dataframe中创建重复列的列表(指出现多次的列名):
  • 使用函数
    .index()
    ,它可以帮助我找到在每次迭代中重复的第一个元素,并在下面划线:
  • 这个
    for
    循环帮助我在所有重复的列下面加下划线,现在每个列都有一个不同的名称

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

  • 最后,使用带下划线的元素重命名列:
  • df.columns=所有列的列表


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

    回答这个问题:
    当我做df['a']时,它将返回哪个值
    -它将返回一个所有列都命名为
    a
    @MaxU的df,它没有返回所有值…这就是为什么我感到惊讶!!!!我在Pandas 0.19.0下测试了它-你使用的是什么版本?@MaxU same…当我使用
    时,它工作得非常好!!!!很好。。。。。另外,在我的例子中,只有一个可以有一个值,rest将是
    NaN
    。因此,我如何选择唯一的值非NaN或NaN是所有值都是nan@vks这是一个完全无关的问题。碰巧最近有人问这个问题。我会找到它并贴在这里。@vks这个问题和答案可以用来得到你想要的。如果对你来说不够具体,问一个新问题。我看不出您实际使用了参数
    mangle\u dupe\u cols
    。为什么只有我一个人感到困惑?:)@瑞尼你不是唯一的一个。他需要在某个地方使用它。默认情况下,如果为true,那么它将处理重复的列。
    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')
    
    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')
    
    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
    
    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'