科学记谱法Matplotlib / Pandas

时间:2018-04-17 18:23:15

标签: python pandas matplotlib

我有一个包含大约28列和4000行的CSV文件。从这些列中的两列我想绘制约50个特定行。我用pandas来选择文件的这一部分,但我无法弄清楚,它是如何以正确的方式读取科学数字的。

我的代码:

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

所以,我试图绘制列'直径'和你'dN / dlnD'列在列'u'run#'时显示数字3.在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)

SOLUTION:

正如您所指出的,逗号就是问题所在。我只是在代码中添加了小数设置:

df = pd.read_csv("test.csv", sep=";", decimal=",")

现在图表看起来应该看起来如何。

谢谢!

1 个答案:

答案 0 :(得分:0)

很明显,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>]

enter image description here