![](/img/trans.png)
[英]How to keep column order after df.update() + df.reset_index()
[英]Why is df.reset_index() adding 5 zeros after a decimal in my dataframe?
我是一名 MPH 流行病學學生,在數據科學介紹課上,幾乎沒有編程經驗。 我已經將一個 json 文件上傳到 pycharm,使用
pub_num = pd.DataFrame(papers['Publication_Year'].value_counts())
然后使用重置索引
pub_num = pub_num.reset_index()
重置索引后,它取了我數據框中的整數,並在小數點后添加了 5 個零。 現在我正在嘗試繪制數據框,但我無法正確繪制它們,因為它無法識別整數。
為什么要添加零,我該如何擺脫它們? 它在我的控制台中顯示良好。 沒有零。 但是然后我查看環境並在右下角“查看為數據框”,我可以看到所有的零。 屏幕截圖顯示沒有零的控制台和帶有零的數據幀。
我嘗試使用 df.astype(int) 改回 int 並將精度更改為 0。但都沒有奏效。
import json
import pandas as pd
import matplotlib.pyplot as plt
# open and prints out the json file
with open('Papers.json') as file:
data = json.load(file)
# convert to pandas dataframe.
papers = pd.read_json('Papers.json')
# creates a dataframe to count the number of publications in each year
pub_num = pd.DataFrame(papers['Publication_Year'].value_counts())
pub_num = pub_num.reset_index()
pub_num.columns = ['Publication_Year', 'Counts']
print(pub_num)
df 的輸出是:
Publication_Year Counts
0 2010 10
1 2009 5
我的情節代碼是這樣的:
plt.scatter(x = 'Publication_Year', y = 'Counts', data = pub_num)
plt.xlabel('Publication Year')
plt.ticklabel_format(useOffset=False)
plt.show()
使用 plt.ticklabel_format(useOffset=False) 繪圖
如果我不使用 plt.ticklable_format 函數,則繪圖
更新:所以我建議使用以下方法轉換為日期時間:
pub_num['Publication_Year'] = pd.to_datetime(pub_num['Publication_Year'],format='%Y')
這是出來的圖表:使用轉換為年份而不是整數的圖表它仍然在年復一年地添加額外的數字,這就是為什么我真的相信它,因為我的 df 中的小數點后有零,如第一張圖片所示。
這與數據框中的零無關。
在您的第一個輸出中,您只有兩行。
Publication_Year Counts
0 2010 10
1 2009 5
在繪圖方面,您將有兩個有序對:(2009, 5) 和 (2010, 10)。 這意味着您的圖表中有兩個點。
這正是您提供的此鏈接中輸出的內容。 由於2010
和2009
是整數,為了便於閱讀,pandas 只會在x
軸上的xticks
插入值。 這些值沒有任何意義,它們只是x
軸的一部分,但是您可以通過混淆plt.plot
函數的xticks
和xtickslabels
參數來完全修改它們。
當您將值設置為datetime
,您的數據將如下所示:
Publication_Year Counts
0 2010-01-01 10
1 2009-01-01 5
同樣,您的數據框中將有兩個點。 Pandas 將再次在這些點之間進行插值以提高可讀性。 由於開始時間是January 2009
January 2010
,結束時間是January 2010
,因此為了便於閱讀,您將有March
、 April
、 July
等等。
同樣,這與小數點無關。
如果您在plt.show()
行之前添加plt.xticks([2009, 2010])
,您將強制您的代碼只有兩個刻度:2009 和 2010。結果將類似於:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.