使用Python熊猫读取列名

时间:2019-12-21 20:36:26

标签: python pandas

我是python的新手,对使用pandas和matplotlib有疑问。我正在解析CSV文件并使用列名称创建条形图。根据该周要解析的CSV文件,列名可能会有所不同。例如,本周的列名称可能是“星期三”,“星期四”和“星期天”,但是下周它们可能是星期几。我的脚本工作正常,无论如何我都希望它做同样的事情。我的问题是我应该如何读入列名,这样我就不必手动指定名称,而只需根据位置(column1,column2,column3,...”来查找列即可。

注意:第一列是“名称”,如下面的脚本所示,这部分将始终相同,因此可以为此硬编码输入列名称。因此,我想对其进行软编码第2、3和4列的列名。

这是我当前脚本的一部分,必须手动输入列名:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

files = "myfile.csv"
df = pd.read_csv(files)
names = df['Names'].values
x = np.arange(len(names))
w = 0.40
difference = df['Sunday'] - df['Thursday']
colors = ['Red' if d < -5 else 'Blue' for d in difference]
plt.bar(x-w, df['Wednesday'].values, width=w*0.7, label='Wednesday', color = "cyan")
plt.bar(x, df['Thursday'].values, width=w*0.7, label='Thursday', color = "green")
plt.bar(x+w, df['Sunday'].values, width=w*0.7, label='Sunday', color = colors)
...

理想情况下,我想要一个看起来像这样的程序:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

files = "myfile.csv"
df = pd.read_csv(files)
names = df['Names'].values
x = np.arange(len(names))
w = 0.40
column2 = ...
column3 = ...
column4 = ...
difference = df[col4] - df[col3]
colors = ['Red' if d < -5 else 'Blue' for d in difference]
plt.bar(x-w, df[column2].values, width=w*0.7, label='column2', color = "cyan")
plt.bar(x, df[column3].values, width=w*0.7, label='column3', color = "green")
plt.bar(x+w, df[column4].values, width=w*0.7, label='column4', color = colors)
...

为更清楚地了解,以下是CSV文件的示例:

  

名称星期一星期一星期三
  德里克45 60 52
  珍娜(Jenna)先生(男)56岁(男)87岁(男)89岁   莉莎78 93 76
  哈里·布莱恩(Harry)98 98 84(Harry)98 79

3 个答案:

答案 0 :(得分:1)

您可以简单地替换

column2 = ...
column3 = ...
column4 = ...

使用

column2 = df.columns[2]
column3 = df.columns[3]
column4 = df.columns[4]

答案 1 :(得分:0)

您可以使用df.items()遍历列(和列数据):

colors = {"Monday": "cyan", ...}  # you get the idea

for day_of_week, data in df.items():
    plt.bar(x-w, data, width=w*0.7, label=day_of_week, color=colors[day_of_week])

答案 2 :(得分:0)

不确定您要寻找什么,但这是我的方法:

df = pd.read_excel('test.xlsx')
names = df['Name'].values
df = df.loc[:, df.columns != 'Name']
print(names)
# ['Derick' 'Jenna' 'Lisa' 'Harry']

x = np.arange(len(names))
w = 0.40
columns = [col for col in df]
print(columns)
# ['Monday', 'Wednesday', 'Saturday']

column2 = df[columns[0]]
column3 = df[columns[1]]
column4 = df[columns[2]]
difference = column4 - column3
colors = ['Red' if d < -5 else 'Blue' for d in difference]
plt.bar(x-w, column2, width=w*0.7, label=columns[0], color = "cyan")
plt.bar(x, column3, width=w*0.7, label=columns[1], color = "green")
plt.bar(x+w, column4, width=w*0.7, label=columns[2], color = colors)
plt.legend()
plt.show()