用Python对Pandas数据框进行复杂操作,以进行绘图和统计分析

2024-04-26 05:49:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python通过Pandas读取CSV文件并创建一个数据帧。以下是print语句的一部分,显示每小时的数据:

      Location                Time         Count      Speed    Parameter1...
0         CCNY 2010-01-01 06:00:00             1      48.00    35.8
1         CCNY 2010-01-01 07:00:00             2      18.00    32.6
...        ...                 ...           ...        ...    ...
97775     PS19 2013-12-31 21:00:00           178       9.27    12.8
97776     PS19 2013-12-31 22:00:00           190       8.90    11.7

(时间是包含日期和时间的一列。)

这就是我需要做的:

  • 每天绘制每个位置的速度与各种参数(数据包含每小时的信息)。我没有在上面的打印示例中显示各种参数,但是它们保存在每行的其他列中。对于每个CCNY位置,有速度和4个其他参数。对于PS19位置,只有速度和1个其他参数。因此,在1月份,CCNY的速度vs参数1有31个图,CCNY的速度vs参数2有31个图,CCNY的速度vs参数3有31个图,CCNY的速度vs参数4有31个图。对于PS19的其他位置,只有31个速度与参数1的曲线图。请评论,如果这是混淆!

  • 接下来,对于每个图,我需要添加一条最佳拟合线,并计算斜率和r平方值。

鉴于所有的大输出,我想输出所有的绘图图像到一个文件夹和斜率和r平方值为每个地点和一天的CSV。你知道吗

我创建的数据框如下:

def parse_date(raw_date):
    return datetime.strptime(raw_date, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv('part-00000', delimiter=',')
df['Time'] = df['Time'].map(parse_date)

这是我迄今为止的尝试,但它不能正常工作:

locations = { 'CCNY': ('Parameter1', 'Parameter2', 'Parameter3', 'Parameter4'),
             'PS19': ('Parameter1') }

for location in locations.keys():
    for i in xrange(0, len(locations[location])):  
        df.groupby(df['Time'].dt.day).plot(x='Average_Speed', y=locations[location][i], style = 'o', title=location+": "+locations[location][i]+" "+str(i))
        plt.savefig('plots/plot'+str(location)+str(locations[location][i])+'_'+str(i)+'.png') 

Tags: csv数据df参数datetimelocation速度
1条回答
网友
1楼 · 发布于 2024-04-26 05:49:33

我解决了这个问题:

首先,需要遍历groupby创建的组,这就是为什么它只生成4个图:

for i, group in df.groupby(df['Time'].dt.date)

其次,为了计算斜率和r值,可以使用SciPy:

from scipy.stats import linregress

在循环中添加:

slope, intercept, r, p, stderr = linregress(group['Speed'], group[Parameter])

相关问题 更多 >