如何使用pandas绘制类似命名的列?

2024-04-26 05:06:00 发布

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

我已经用熊猫阅读了一些csv文件。目前只有两个文件,但几周后我将处理数百个具有相同数据变量的csv文件

我使用for循环读取文件并将数据帧附加到单个列表中,然后使用此for循环区分一些名称:

for i, df in enumerate(separate_data, 1):
    df.columns = [col_name+'_df{}'.format(i) for col_name in df.columns]

我的问题是,如何使用条形图比较文件之间的变量?例如,一个常见的变量是温度,所以在区分列名之后,我现在有了temp_df1和temp_df2。我如何调用所有的温度列来比较条形图中的温度

我尝试使用此功能,但无法使其正常工作:

for df in separate_data:
    temp_comp = separate_data.plot.bar(y='temp*')

2条回答

假设下面有三个数据帧,每个数据帧都有一个临时列。以下是如何将临时列迭代组合到单个新数据帧中并绘制它们:

import matplotlib.pyplot as plt
import pandas as pd

df1 = pd.DataFrame({'temp':[100,150,200], 'pressure': [10,20,30]})
df2 = pd.DataFrame({'temp':[50,70,100], 'pressure': [10,25,40]})
df3 = pd.DataFrame({'temp':[110,80,120], 'pressure': [8,20,50]})
df_list = [df1,df2,df3]

df_combined = pd.DataFrame()
for i, df in enumerate(df_list):
    df_combined[f'df{i+1}'] = df['temp']
print('Combined Dataframe\n', df_combined)

df_combined.plot(kind = 'bar')
plt.ylabel('Temp')
plt.show()

#Combined Dataframe
    df1  df2  df3
0  100   50  110
1  150   70   80
2  200  100  120

enter image description here

请注意,这假定所有数据帧的长度相同。如果这不是真的,您可以从每个数据帧读取前n(例如50)行,以确保长度相等,包括:

df = pd.read_csv('sample.csv', nrows=50).

如果可以,我会读入一个带有标识符的数据帧,以使聚合更容易。例如:

import pandas as pd

filenames = ["file_1.csv", "file_2.csv"]

df = pd.concat(
    [
        pd.read_csv(filename).assign(filename=filename.split(".")[0])
        for filename in filenames
    ]
)

df.groupby("filename")["column_to_plot"].mean().plot.bar()

相关问题 更多 >