Pandas 中的箱线图

Box-plot in Pandas

我有两个 csv 文件,每个文件都有一列。 该列在它们之间共享信息,例如 PassengerId、Name、Sex、Age。等等

我正在尝试绘制每个头衔(先生、夫人等)的乘客年龄分布的箱线图。我得到一个错误。 plot可以绘制的错误如何传递?

import csv as csv
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
csv_file_object = csv.reader(open('test.csv', 'r')) 

header = next(csv_file_object)
data=[] 

for row in csv_file_object:
    data.append(row)
data = np.array(data) 

csv_file_object1 = csv.reader(open('train.csv', 'r')) 
header1 = next(csv_file_object1) 
data1=[] 

for row in csv_file_object:
    data1.append(row)
data1 = np.array(data1)


Mergerd_file = header.merge(header1, on='PassengerId')

df = pd.DataFrame(Mergerd_file, index=['pAge', 'Tilte'])

df.T.boxplot(vert=False)
plt.subplots_adjust(left=0.25)
plt.show()

我得到这个错误

  ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-23-0d7fafc1fcf9> in <module>()
     21 
     22 
---> 23 Mergerd_file = header.merge(header1, on='PassengerId')
     24 
     25 df = pd.DataFrame(Mergerd_file, index=['pAge', 'Tilte'])

AttributeError: 'list' object has no attribute 'merge'

您使用的代码适用于 Python 2,但您是 运行 Python 3。在 Python 3 中(推荐在 Python 2.6+), 推进迭代器的正确方法是使用

header = next(csv_file_object1)

此外,文件应该以文本模式打开 'r',而不是 'rb'

我觉得你需要read_csv first, then concat both DataFrames and last create boxplot:

df1 = pd.read_csv('el/test.csv')
print (df1.head())

df2 = pd.read_csv('el/train.csv')
print (df2.head())

df = pd.concat([df1, df2])
df['Title'] = df.Name.str.extract(', (.*)\.', expand=False)
print (df.head())

df[['Age','Title']].boxplot(vert=False, by='Title')
plt.subplots_adjust(left=0.25)
plt.show()