[英]Scientific Notation Matplotlib / Pandas
我有一個包含28列和4000行的CSV文件。 從這些列中的兩個中,我想繪制約50個特定行。 我用熊貓來選擇文件的這一部分,但我不知道它是如何以正確的方式讀取科學數字的。
我的代碼:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("20180416309.csv", sep=";")
x = df.loc[df[u'run#'] == 3, [u' Diameter']].values
y = df.loc[df[u'run#'] == 3, [u' dN/dlnD']].values
plt.plot(x, y)
plt.show
因此,我試圖在u'run#'列中顯示數字3時繪制u'Diameter'和u'dN / dlnD'列。在IPython控制台中鍵入“ x”或“ y”,正確的數字是給定的。
不幸的是,情節看起來像這樣:
如您所見,這些數字在y軸上的科學計數形式的十進制冪被忽略。 我怎樣才能解決這個問題? 這是我第一次嘗試使用matplotlib和pandas,所以請原諒我的初學者問題。
編輯:
該文件的數據如下所示:
run#; Diameter; dN/dlnD;
12; +3,58151E+01; +1,17336E+03;
13; +3,26913E+01; +6,06044E+03;
13; +2,98524E+01; +1,76516E+04;
13; +2,72704E+01; +4,88716E+04;
13; +2,49202E+01; +1,00035E+05;
使用IPython控制台讀取我的“ x”或“ y”數據,輸出如下所示:
[' +1,94251E+02'],
[' +5,23981E+02'],
[' +0,00000E+00'],
[' +1,10525E+02'],
[' +0,00000E+00'],
[' +4,76363E+01'],
[' +1,61714E+01'],
[' +1,65482E+02'],
[' +0,00000E+00'],
[' +4,75312E+02'],
[' +4,20174E+01']], dtype=object)
解:
正如您所指出的,逗號是問題所在。 我只是在代碼中添加了十進制設置:
df = pd.read_csv("test.csv", sep=";", decimal=",")
現在該圖看起來像是應該看起來的樣子。
謝謝!
很明顯,csv數據未正確讀取,或者更具體地沒有按您的預期讀取。 根據您的示例,所有數據都被讀取為包含數字的字符串。 原因是文件的數字格式將無法正確解釋,具體取決於您的區域設置。 我修改了您提供的一小段數據,以使句點(而不是逗號)代表小數點,這是我的區域設置中的習慣。 如您所見,數據已正確讀取到數據框中。
df = pd.read_csv("d:\\users\\floyd\\documents\\sample.csv", sep=';'); df
Out[72]:
run# Diameter dN/dlnD
0 12 35.8151 1173.36
1 13 32.6913 6060.44
2 13 29.8524 17651.60
3 13 27.2704 48871.60
4 13 24.9202 100035.00
我還以此刪除了列名中令人討厭的前導空格。
df.columns = [col.strip() for col in df.columns]; df.columns
現在可以正確繪制了。
plt.plot(df['Diameter'], df['dN/dlnD'])
Out[75]: [<matplotlib.lines.Line2D at 0x25ef97bd0b8>]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.