【问题标题】:python pandas dataframe: naming columns is making new columnspython pandas数据框:命名列正在创建新列
【发布时间】:2016-04-20 14:32:27
【问题描述】:

我在 txt 文件中有 csv 数据,例如:

20050601,      25.22,      25.31,      24.71,      24.71,   27385
20050602,      24.68,      25.71,      24.68,      25.45,   16919
20050603,      25.07,      25.40,      24.72,      24.82,   12632

我想将这些数据放入一个 pandas 数据框中,其列名为 date,close,high,low,open,volume

当我使用这段代码时:

df = pd.read_table(File,header=None,names=['date', 'close', 'high', low', 'open', 'volume'])

输出是:

                                             date  close  high  low  \
0     20050601,      25.22,      25.31,      24.71, ...    NaN   NaN  NaN   
1     20050602,      24.68,      25.71,      24.68, ...    NaN   NaN  NaN   
2     20050603,      25.07,      25.40,      24.72, ...    NaN   NaN  NaN   
  open  volume  
0      NaN     NaN  
1      NaN     NaN  
2      NaN     NaN  `

当我使用时:

df = pd.read_table(File,header=None)

输出是:

                                                      0
0     20050601,      25.22,      25.31,      24.71, ...
1     20050602,      24.68,      25.71,      24.68, ...
2     20050603,      25.07,      25.40,      24.72, ...

我认为当 header 设置为 none 时,标题中的零位于最右侧的列上,并导致新名称移到它的右侧,从而创建新列。不过我不确定。

感谢任何可以帮助我的人!

【问题讨论】:

    标签: python csv pandas dataframe


    【解决方案1】:

    我用这个解决了:

    df = pd.read_table(File,names=['date','close','high','low','open','volume'],sep=',' )
    

    有谁知道为什么sep=',' 会延长 2 倍的时间? Performance difference in pandas read_table vs. read_csv vs. from_csv vs. read_excel?

    【讨论】:

    • 因为它工作正常而之前没有工作?
    • 如果您的分隔符是,,为什么不直接使用pd.read_csv 读取?
    【解决方案2】:

    您可以使用read_csv 和分隔符,\s+ 来表示, 和任意空格:

    import pandas as pd
    import io
    
    temp=u"""20050601,      25.22,      25.31,      24.71,      24.71,   27385
    20050602,      24.68,      25.71,      24.68,      25.45,   16919
    20050603,      25.07,      25.40,      24.72,      24.82,   12632"""
    
    
    #after testing change io.StringIO(temp) to filename
    df = pd.read_csv(io.StringIO(temp), 
                     sep=",\s+", 
                     header=None, 
                     names=['date','close','high','low','open','volume'], 
                     engine='python')
    
    print df
    
           date  close   high    low   open  volume
    0  20050601  25.22  25.31  24.71  24.71   27385
    1  20050602  24.68  25.71  24.68  25.45   16919
    2  20050603  25.07  25.40  24.72  24.82   12632
    

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 2022-11-16
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2020-12-05
      • 2019-06-18
      • 1970-01-01
      • 2014-10-26
      相关资源
      最近更新 更多