我有一个CSV
文件,其数据如下所示:
Time Pressure
1/1/2017 0:00 5.8253
... ...
3/1/2017 0:10 4.2785
4/1/2017 0:20 5.20041
5/1/2017 0:30 4.40774
6/1/2017 0:40 4.03228
7/1/2017 0:50 5.011924
12/1/2017 1:00 3.9309888
我想在压力数据上制作月度直方图(NORMALIZED),最后将图形写入PDF。我知道我需要使用Groupby
和Numpy.hist
选项,但我不确定如何使用它们。 (我是Python的新手)。请帮忙!
代码1:
n = len(df) // 5
for tmp_df in (df[i:i+n] for i in range(0, len(df), n)):
gb_tmp = tmp_df.groupby(pd.Grouper(freq='M'))
ax = gb_tmp.hist()
plt.setp(ax.xaxis.get_ticklabels(),rotation=90)
plt.show()
plt.close()
这给了我以下错误消息:
ValueError: range() arg 3 must not be zero
代码2:
df1 = df.groupby(pd.Grouper(freq='M'))
np.histogram(df1,bins=10,range=None,normed=True)
这会返回另一条错误消息:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我尝试了上面的代码,但是遇到了这些错误。不确定我是否正确使用它。
答案 0 :(得分:1)
一些简单的步骤。首先,您需要将数据文件读入一个单元格数组。一旦你有了列表或行条目列表(你想要称之为什么),你需要收集每个月的所有观察结果并取每个集合的平均值。在这里,我实现了一个简单的存储桶类,以便在几个月内将压力聚合到组中,并为每个组提供平均值。最后,我用matplotlib绘制了结果。
class customTable extends React.Component {
constructor(props) {
super(props);
this.state = {
tableLoading: true,
tabledata: [{override:80,final:90},{override:180,final:190}],
tablelength: 0
};
}
overrideValue = (index, override) => {
let tabledata = [...this.state.tabledata]
tabledata[index].override = override
tabledata[index].overridden = true
this.setState({ tabledata })
}
render() {
const columns = [
{
Header: props => <span>Override Value</span>,
accessor: 'override',
Cell: props => <input onChange={e => this.overrideValue(props.index, e.target.value)} type="number"/>
},
{
Header: 'Final',
accessor: 'final',
Cell: props => (props.original.overridden) ? props.original.override : props.original.final
}
];
return (
<ReactTable data={ this.state.tabledata } loading={ this.state.tableLoading } columns={ columns } defaultPageSize={ 12 } filterable={ true }
showPagination={ false } className="-striped -highlight fontsize-12" />
);
}
};
最后一个快速说明,我不确定您的文件是什么数据格式,看起来2列被7个空格分隔,但其中一个样本只有6个,所以您可能需要更改分隔符或清理表以确保所有行都没有错误地读取。