簡體   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