我正在尝试使用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设置新索引并将标头保持原样。
答案 0 :(得分:0)
不必像熊猫那样摆弄选项,只是做正确的事,请参见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
答案 1 :(得分:0)
与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'
使用regular expressions删除空格:
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'
答案 2 :(得分:0)
将索引设置为False可以解决此问题。
df = pd.read_csv(infile_fire,index_col=False)