【问题标题】:Box-plot in PandasPandas 中的箱线图
【发布时间】:2016-12-22 13:25:24
【问题描述】:

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

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

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 并没有对此抱怨,但稍后会抱怨“AttributeError: '_csv.reader' object has no attribute 'merge'”。
  • 这与 pandas 中的箱线图无关。顺便说一句,如果您使用熊猫,则直接使用pd.read_csv() 导入您的数据框,然后使用pd.concat 并使用seaborn 绘制箱线图。如果您的问题更多是关于如何使用 csv 库,请删除所有不必要的部分,或提出单独的问题并使其更清晰
  • 我的目标是使用 pandas jrjc 绘制每个标题的乘客年龄分布的箱线图
  • 我有点困惑——在csv中没有title列,你认为Sex列吗?

标签: python csv pandas boxplot


【解决方案1】:

我认为你首先需要read_csv,然后是concatDataFrames,最后创建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()

【讨论】:

  • 标题没有单独的列。但是,在名称下有例如 Braund、Owen Harris 先生,所以它是 Mr
  • 好的,你可以自己试试,也可以看看这个answer
  • 非常感谢您的回答:)
  • 感谢您的接受。如果您将来发布一些问题,小建议 - 检查How to make good reproducible pandas examples 以获得更好的问题。祝你好运!
  • 我尝试使用 df['Title']= df.Name.str.extract(', (.* )\.', expand=False).isin(['Dr','Mrs','Mr' ,'Sir']) 但是我得到了 ont true and flase ?
【解决方案2】:

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

header = next(csv_file_object1)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2017-12-12
    • 2013-10-27
    • 2016-06-11
    • 2013-12-28
    • 2015-07-04
    相关资源
    最近更新 更多