【问题标题】:convert data that is in the form of object in a csv to a pivot将 csv 中对象形式的数据转换为数据透视表
【发布时间】:2023-03-03 10:12:01
【问题描述】:

我有一个不美观且不可搜索的文件,因此我以 csv 格式下载了它。它包含 4 列和 116424 行。 我无法将其三列(即年份、年龄和比率)绘制到热图上。 csv 文件的链接是:https://gist.github.com/JustGlowing/1f3d7ff0bba7f79651b00f754dc85bf1

import numpy as np
import pandas as pd
from pandas import DataFrame
from numpy.random import randn
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('new_file.csv')
print(df.info())
print(df.shape)
couple_columns = df[['Year','Age','Ratio']]
print(couple_columns.head())

错误

C:\Users\Pranav\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/Pranav/PycharmProjects/takenmind/Data_Visualization/a1.py 回溯(最近一次通话最后): RangeIndex:116424 个条目,0 到 116423 文件“C:/Users/Pranav/PycharmProjects/takenmind/Data_Visualization/a1.py”,第 12 行,在 数据列(共4列): Couple_columns = df[['Year','Age','Ratio']] AREA 116424 非空对象 getitem 中的文件“C:\Users\Pranav\AppData\Roaming\Python\Python36\site-packages\pandas\core\frame.py”,第 2682 行 YEAR 116424 非空 int64 AGE 116424 非空对象 RATIO 116424 非空对象 数据类型:int64(1),对象(3) 内存使用量:2.2+ MB 没有 (116424, 4) 返回 self._getitem_array(key) _getitem_array 中的文件“C:\Users\Pranav\AppData\Roaming\Python\Python36\site-packages\pandas\core\frame.py”,第 2726 行 indexer = self.loc._convert_to_indexer(key, axis=1) _convert_to_indexer 中的文件“C:\Users\Pranav\AppData\Roaming\Python\Python36\site-packages\pandas\core\indexing.py”,第 1327 行 .format(掩码=objarr [掩码])) KeyError: "['Year' 'Age' 'Ratio'] 不在索引中"

【问题讨论】:

    标签: pandas csv seaborn data-analysis


    【解决方案1】:

    在您的实际数据开始之前,csv 在前 8 行中有一些文本。您可以使用 skiprows 参数跳过这些

    df = pd.read_csv('f2m_ratios.csv', skiprows=8)

    假设您只想为一个区域绘制热图

    df = df[df['Area'] == 'Afghanistan']
    

    在绘制热图之前,您需要某种格式的数据(数据透视表)

    df = df.pivot('Year','Age','Ratio')
    

    现在您的数据框已准备好用于热图

    sns.heatmap(df)
    

    【讨论】:

      【解决方案2】:

      信息输出中的列似乎是大写的:YEAR 116424 non-null int64。你应该能够得到例如带有df[['YEAR']] 的年份列。

      如果您想使用小写,可以使用
      df = pd.read_csv('new_file.csv').rename(columns=str.lower)

      【讨论】:

      • 我想创建一个数据透视表数据框,其中 x 轴为年份,y 轴为年龄范围,单元格内填充性别比例。然后使用 seaborn 为刚刚创建的数据透视表绘制热图。
      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 2015-07-21
      相关资源
      最近更新 更多