繁体   English   中英

read_csv转换列标题

[英]read_csv shifting column headers

我正在尝试使用read_csv将逗号分隔的文本文件读入Python。 但是,Python正在获取标头并将其向右移一位。

列数少于我实际拥有的数据文件示例:(示例文件具有更多数据: https : //www.dropbox.com/s/5glujwqux6d0msh/test.txt?dl=0

DAY,TIME,GENVEG,LATI,LONGI,AREA,CHEM
 226,  1200,     2,   -0.5548999786D+01,    0.3167600060D+02,    0.1000000000D+07, NaN
 226,  1115,     2,   -0.1823500061D+02,    0.3668500137D+02,    0.1000000000D+07, NaN

如果我尝试以下操作(其中infile_fire是上面的txt文件):

df_fires = pd.read_csv(infile_fire,sep="\\,",skipinitialspace=True,engine='python')

我在下面得到这个。 如您所见, DAY实际上在TIME列的上方。 (请注意, AREA列中的值来自我在较大的数据集中拥有的数据,上面的样本子集中未显示该数据) 在此处输入图片说明

我还尝试了df_fires = pd.read_csv(infile_fire).reset_index() ,尽管它确实创建了一个新索引(正如我想要的那样),但它也将226列移到上方并将其命名为index而不是DAY这应该。 在此处输入图片说明

我也尝试了以下方法,但是仍然得到了相同的结果(标头已移动)

df = pd.read_csv(infile_fire)

df = pd.read_csv(infile_fire,index_col=None)

df = pd.read_csv(infile_fire,index_col=0)

我怎样才能解决这个问题? 我只想读入文本文件并让Python设置新索引并将标头保持原样。

无需摆弄选项,例如pandas只是做正确的事,请参阅read_csvcsv.Sniffer文档中的sep

from io import StringIO

import pandas as pd

data = """
DAY,TIME,GENVEG,LATI,LONGI,AREA
 226,  1200,     2,   -0.5548999786D+01,    0.3167600060D+02,    0.1000000000D+07
 226,  1115,     2,   -0.1823500061D+02,    0.3668500137D+02,    0.1000000000D+07
"""

df = pd.read_csv(StringIO(data))
df

在此处输入图片说明

作为file.txt文件,您要读取的文件。

file.txt = """
    DAY,TIME,GENVEG,LATI,LONGI,AREA
     226,  1200,     2,   -0.5548999786D+01,    0.3167600060D+02,    0.1000000000D+07
     226,  1115,     2,   -0.1823500061D+02,    0.3668500137D+02,    0.1000000000D+07
    """

使用:

import pandas as pd

读取文件:

df = pd.read_csv('file.txt')

如果您查看一下df.AREA[0] ,它将是这样的:

'    0.1000000000D+07'

使用正则表达式删除空格:

df.replace('(^\s+|\s+$)', '', regex=True, inplace=True)

如果您现在尝试调用df ,结果将是:

   DAY  TIME  GENVEG               LATI             LONGI              AREA
0  226  1200       2  -0.5548999786D+01  0.3167600060D+02  0.1000000000D+07
1  226  1115       2  -0.1823500061D+02  0.3668500137D+02  0.1000000000D+07

因此,您的df.AREA[0]将如下所示:

'0.1000000000D+07'

与其他示例一样,例如: df.LATI[0]

'-0.5548999786D+01'

将index设置为False可以解决此问题。

df = pd.read_csv(infile_fire,index_col=False)

暂无
暂无

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

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