[英]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_csv和csv.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.