我一直在測驗我在 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 行“是”。所以我的兩個問題是:
- 洗掉一行。
- 無法將資料添加到空白單元格。
uj5u.com熱心網友回復:
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
然后,當您寫出 CSV 時,to_csv(header=None)您會丟失第一行資料。
為了解決這個問題,你可以這樣做:
pandas.read_csv('path/to/my/script/test.csv', header=None)
或者你可以這樣做:
pandas.to_csv('path/to/my/script/test.csv')
只要確保您與 一致header=None,您要么同時設定pandas.read_csvand pandas.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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492551.html
