簡體   English   中英

科學符號Matplotlib /熊貓

[英]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.

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