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