jak*_*vdp 5 python matplotlib pandas
我有一个看起来像这样的非标准CSV文件:
x,y
1,"(5, 27, 4)"
2,"(3, 1, 6, 2)"
3,"(4, 5)"
Run Code Online (Sandbox Code Playgroud)
使用pd.read_csv()导致的结果并不是那么有用,因为元组没有被解析。有迹象表明,解决这个问题(一个现有的答案1,2),但由于这些元组具有异质性的长度,这些答案是不是我有问题是完全有益的。
我想做的是绘图x与y使用熊猫绘图例程。天真的方法会导致错误,因为元组存储为字符串:
>>> # df = pd.read_csv('data.csv')
>>> df = pd.DataFrame({'x': [1, 2, 3],
'y': ["(5, 27, 4)","(3, 1, 6, 2)","(4, 5)"]})
>>> df.plot.scatter('x', 'y')
[...]
ValueError: scatter requires y column to be numeric
Run Code Online (Sandbox Code Playgroud)
我希望得到的结果是这样的:
import numpy as np
import matplotlib.pyplot as plt
for x, y in zip(df['x'], df['y']):
y = eval(y)
plt.scatter(x * np.ones_like(y), y, color='blue')
Run Code Online (Sandbox Code Playgroud)
通过转换数据框并使用df.plot.scatter()(最好不使用eval())直接从熊猫创建此图的简单方法吗?
你可以爆炸df和plot
In [3129]: s = df.y.map(ast.literal_eval)
In [3130]: dff = pd.DataFrame({'x': df.x.repeat(s.str.len()).values,
'y': np.concatenate(s.values)})
In [3131]: dff
Out[3131]:
x y
0 1 5
1 1 27
2 1 4
3 2 3
4 2 1
5 2 6
6 2 2
7 3 4
8 3 5
Run Code Online (Sandbox Code Playgroud)
并且,情节
dff.plot.scatter('x', 'y')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |