【问题标题】:Pandas how to use initially generated column names without renaming them熊猫如何使用最初生成的列名而不重命名它们
【发布时间】:2022-10-14 21:48:53
【问题描述】:

我很高兴我们可以使用Pandas 最初生成的column names 的任何方式,同时读取csv/Text 文件,如下所示

df = pd.read_csv("some_text_file.txt", header = None)

这将给出类似的东西

     0         1         2

0   data1    data2     data3  
1  r2 data1  r2 data2     r2 data3  

当我们使用header = None 时,它默认生成了一些column names as = 0 1 2

当我尝试访问它们时

-->    df['0'] = sometask

它抛出错误

raise KeyError(key) from err
KeyError: '0'

它们根本不是列名吗?我见过有人称他们为Levels。喜欢

level0 - column 0
level1 - column 1
level2 - column 2 

我也试过

-->    df[level0] = sometask

它扔了

NameError: name 'level0' is not definedNameError: name 'level0' is not defined

我知道我们必须重命名列名并像使用它们一样

df.columns =['col1','col2'.....]

但是,想知道我们有什么方法可以将这些pandas 生成column names,而无需如上所示重命名它们。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    pd.read_csv 中,您可以将列表传递给names 参数。例如。:

    df = pd.read_csv('some_text_file.txt', header=None, 
                     names=[f'col_{i}' for i in range(1,4)])
    
    print(df)
    
          col_1     col_2     col_3
    0     data1     data2     data3
    1  r2 data1  r2 data2  r2 data3
    

    请注意names 的列表不能包含任何重复项(例如['col', 'col', 'col2'] 将导致错误)。


    默认列“名称”0,1,2 等是整数,而不是字符串。您可以按如下方式检查:

    print(df.columns)
    
    Int64Index([0, 1, 2], dtype='int64')
    

    例如。要访问列0,您应该使用df[0]df.loc[:,0],而不是df['0'] 等。

    【讨论】:

    • 明白了...调用coloumn的正常方式是df['some_nbame'] ....所以我说这些0,1,2,3 ...也是列名...所以应该像df['0']一样使用...。谢谢你的详细解释!!
    【解决方案2】:

    默认情况下,列的名称是一个数字。因此,当尝试访问df['0'] 时,您将获得KeyError,但如果您使用df[0],您将获得第一列。

    【讨论】:

    • 我怎么错过了!!
    猜你喜欢
    • 2021-08-15
    • 2020-07-04
    • 2017-03-20
    • 2020-09-04
    • 2014-11-23
    • 2020-07-30
    • 2019-05-25
    • 2022-11-21
    相关资源
    最近更新 更多