簡體   English   中英

Pandas 沒有讀取整個 .CSV 文件

[英]Pandas is not Reading Entire .CSV File

我一直在測試我在 Pandas 上遇到的一些問題。 我的最終目標是將數據添加到 .csv。 在尋找更改 .csv 的方法時,我選擇了這種方法:

import pandas
data = pandas.read_csv('path/to/my/script/test.csv')

data.iat[1,1] = 'DataHere'

data.to_csv('path/to/my/script/test.csv', index=False, header=False)

這段代碼工作得有些正確。 DataHere轉到第二行第二列,這是正確的(因為 [0,0] 是第一行和第一列。注意:它不是正常的 x,y 坐標,它更像是 y,x)。

代碼前的 test.csv (6x6):

yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes

代碼后的test.csv(6x5):

yes,yes,yes,yes,yes,yes
yes,DataHere,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes

由於某種原因,它擺脫了最下面的一行! 所以我對pandas.read_csv('path/to/my/script/test.csv')的參數做了一些處理來解決這個問題,得到了這個:

data = pandas.read_csv('path/to/my/script/test.csv', nrows=6, skip_blank_lines=False)

我添加了nrows=6以使其讀取6行,盡管我確實打算在將來使它更高。 我添加了skip_blank_lines=False因為我希望能夠將數據添加到空白單元格。

當我運行這個新代碼時(將 csv 更改為之前的 6x6 狀態后),它沒有幫助。 它仍然會擦除第 6 行。

import pandas
data = pandas.read_csv('path/to/my/script/test.csv', nrows=6, skip_blank_lines=False)

data.iat[1,1] = 'DataHere'

data.to_csv('path/to/my/script/test.csv', index=False, header=False)

我還嘗試data.iat[6,3] = 'DataHere'而不是data.iat[1,1] = 'DataHere' ,它返回了這個錯誤:

IndexError: index 6 is out of bounds for axis 0 with size 5

這表明它不僅在擦除最后一行,而且無法將數據添加到空白單元格。 為了確保這是這一行的錯: data = pandas.read_csv('path/to/my/script/test.csv', nrows=6, skip_blank_lines=False) ,我把print(data)放在了這一行緊隨其后並得到這個輸出(加上前面提到的錯誤)。 那里應該有第 5 行“是”。 所以我的兩個問題是:

  1. 刪除一行。
  2. 無法將數據添加到空白單元格。

pandas.read_csv('path/to/my/script/test.csv')使用第一行作為標題行。 您的test.csv沒有標題行。 因此很可能test.csv中的第一行(數據行)被讀取為標題行。 給你 5 個數據行,而不是你期望的 6 個。

這可能正在發生

sim_csv = io.StringIO(
'''yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes'''
)

data = pd.read_csv(sim_csv)
print(data)

   yes yes.1 yes.2 yes.3 yes.4 yes.5
0  yes   yes   yes   yes   yes   yes
1  yes   yes   yes   yes   yes   yes
2  yes   yes   yes   yes   yes   yes
3  yes   yes   yes   yes   yes   yes
4  yes   yes   yes   yes   yes   yes

然后,當您使用to_csv(header=None)寫出 CSV 時,您會丟失第一行數據。

為了解決這個問題,你可以這樣做:

pandas.read_csv('path/to/my/script/test.csv', header=None)

或者你可以這樣做:

pandas.to_csv('path/to/my/script/test.csv')

只要確保您與header=None一致,您可以將pandas.read_csvpandas.to_csv都設置為header=None ,或者只是刪除它,不要在其中一個或另一個上設置header=None

添加行(單元格到新行)

您可以使用索引添加一行(單元格到一行)。 例如,如果您有:

   yes yes.1 yes.2 yes.3 yes.4 yes.5
0  yes   yes   yes   yes   yes   yes
1  yes   yes   yes   yes   yes   yes
2  yes   yes   yes   yes   yes   yes
3  yes   yes   yes   yes   yes   yes
4  yes   yes   yes   yes   yes   yes  

然后你可以這樣做:(注意這是.at而不是.iat

df.at[5,'yes'] = 'yes'

這會給你:

   yes yes.1 yes.2 yes.3 yes.4 yes.5
0  yes   yes   yes   yes   yes   yes
1  yes   yes   yes   yes   yes   yes
2  yes   yes   yes   yes   yes   yes
3  yes   yes   yes   yes   yes   yes
4  yes   yes   yes   yes   yes   yes
5  yes   NaN   NaN   NaN   NaN   NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM