使用matplotlib创建散点图给我一个空的或正确的绘图,具体取决于我是使用from_dict
从字典构建pandas数据帧还是仅使用pandas.DataFrame
的列表构建pandas数据框。
import pandas as pd
import matplotlib.pyplot as plt
list_data = ['2016-10-06', '2016-09-24', 55, 'dummy', 0.510823, 0.29431]
columns = ['master', 'slave', 'baseline', 'coh', 'coh_mean', 'coh_std']
dict_data = dict(zip(columns, list_data))
data = pd.DataFrame.from_dict(dict_data, orient='index').T
data.slave = pd.to_datetime(data.slave)
fig, axes = plt.subplots()
axes.scatter(data.slave.values, data.baseline.values)
plt.show()
结果:
while:
list_data = ['2016-10-06', '2016-09-24', 55, 'dummy', 0.510823, 0.29431]
columns = ['master', 'slave', 'baseline', 'coh', 'coh_mean', 'coh_std']
data = pd.DataFrame([list_data], columns=columns)
data.slave = pd.to_datetime(data.slave)
fig, axes = plt.subplots()
axes.scatter(data.slave.values, data.baseline.values)
plt.show()
结果:
MacOS Sierra 10.12.6 || python:v3.6.2 || matplotlib:v2.0.2 || pandas v0.20.3
我尝试了各种后端以及python:v2.7无济于事。 任何人都可以解释为什么会发生这种情况(甚至重现):OverflowError with Matplotlib and datetime)?
答案 0 :(得分:0)
这种情况正在发生,因为从字典创建数据帧(使用上述方法)并不是推断数据类型。它可能在以后的版本中,但我正在运行0.20.1
。出于演示目的,我重命名了您的dfs:
df_fromdict = pd.DataFrame.from_dict(dict_data, orient='index').T
df_fromdict.slave = pd.to_datetime(df_fromdict.slave)
df_fromdict.dtypes
master object
slave datetime64[ns]
baseline object # notice here your baseline column is not recognized as int
coh object
coh_mean object
coh_std object
dtype: object
df_fromlist = pd.DataFrame([list_data], columns=columns)
df_fromlist.slave = pd.to_datetime(df_fromlist.slave)
df_fromlist.dtypes
master object
slave datetime64[ns]
baseline int64 # recognized as int by default
coh object
coh_mean float64
coh_std float64
dtype: object
尝试以下测试,您的第一个散点图应按预期显示:
fig, axes = plt.subplots()
axes.scatter(df_fromdict.slave.values, df_fromdict.baseline.astype(int).values)
plt.show()