簡體   English   中英

為什么 df.reset_index() 在我的數據框中的小數點后添加 5 個零?

[英]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)。 這意味着您的圖表中有兩個點。

正是您提供的此鏈接中輸出的內容 由於20102009是整數,為了便於閱讀,pandas 只會在x軸上的xticks插入值。 這些值沒有任何意義,它們只是x軸的一部分,但是您可以通過混淆plt.plot函數的xticksxtickslabels參數來完全修改它們。

當您將值設置為datetime ,您的數據將如下所示:

     Publication_Year  Counts
0          2010-01-01      10
1          2009-01-01       5

同樣,您的數據框中將有兩個點。 Pandas 將再次在這些點之間進行插值以提高可讀性。 由於開始時間是January 2009 January 2010 ,結束時間是January 2010 ,因此為了便於閱讀,您將有MarchAprilJuly等等。

同樣,這與小數點無關

如果您在plt.show()行之前添加plt.xticks([2009, 2010]) ,您將強制您的代碼只有兩個刻度:2009 和 2010。結果將類似於:

在此處輸入圖片說明

暫無
暫無

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

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