如何在pandas中高效地为EDA重构数据集?

plicqrtu  于 2023-06-04  发布在  其他
关注(0)|答案(2)|浏览(490)

我刚开始学习pandas,找到了一个excel数据集,导出到csv。它由40个独特部门的多个变量组成。结构如下,但每个部门报告10年的变量A、B、C等。
| 部门|变量A(2010年)|变量A(2011年)|变量B(2010年)|变量B(2011年)|
| - -----|- -----|- -----|- -----|- -----|
| 一个|一万二|一万三千|一万两千五百|13040|
| B|一万四千|一万五|12070| 13060|
我认为这将很难在pandas中进行分析,因此在导出为csv然后导入pandas之前,需要在excel中重新构建数据集。
我已经尝试如下重组数据集,认为这将使pandas中的数据分析更容易。
| 年份|部门|变量A|变量B|
| - -----|- -----|- -----|- -----|
| 2010年|一个|一万二|一万两千五百|
| 2010年|B|一万四千|12070|
| 2011年|一个|一万三千|13040|
| 2011年|B|一万五|13060|
然而,这是非常繁琐的手工操作,容易出错。我还没有找到一种在pandas中操作/重组数据的方法,如第二个表所示。请问是否有一个方法我失踪,应该调查请?谢谢你的指点。

qybjjes1

qybjjes11#

.wide_to_long()

pd.wide_to_long(df, stubnames=['VariableA', 'VariableB'], suffix=r'[(]\d+[)]', i='Department', j='Year')
VariableA  VariableB
Department Year                        
A          (2010)      12000      12500
B          (2010)      14000      12070
A          (2011)      13000      13040
B          (2011)      15000      13060

如果需要,可以.reset_index()并从结果Year列中删除()

ppcbkaq5

ppcbkaq52#

是的,有一种方法可以使用pandas重组数据。您可以使用pandas中的melt函数将数据从宽格式重塑为长格式。这里有一个例子,你可以如何实现这一点:

import pandas as pd

# Read the CSV file
df = pd.read_csv('your_data.csv')

# Reshape the data using melt
melted = pd.melt(df, id_vars=['Department'], var_name='Year', 
value_name='Value')

# Extract the variable name from the column name
melted['Variable'] = melted['Year'].str.extract('(\D+)', expand=False)
melted['Year'] = melted['Year'].str.extract('(\d+)', expand=False)

# Reorder the columns
melted = melted[['Year', 'Department', 'Variable', 'Value']]

# Print the resulting dataframe
print(melted)

python
Copy code
import pandas as pd

# Read the CSV file
df = pd.read_csv('your_data.csv')

# Reshape the data using melt
melted = pd.melt(df, id_vars=['Department'], var_name='Year', value_name='Value')

# Extract the variable name from the column name
melted['Variable'] = melted['Year'].str.extract('(\D+)', expand=False)
melted['Year'] = melted['Year'].str.extract('(\d+)', expand=False)

# Reorder the columns
melted = melted[['Year', 'Department', 'Variable', 'Value']]

# Print the resulting dataframe
print(melted)

此代码将原始宽格式数据集转换为长格式数据集,类似于您提供的第二个表。melt函数用于将列'VariableA(2010)'、'VariableA(2011)'、'VariableB(2010)'、'VariableB(2011)'等堆叠到单个列'Value'中,同时保持'Department'列作为标识符。将拆分列名以提取年份和变量名。
确保将'your_data.csv'替换为CSV文件的实际路径或文件名。
通过使用pandas中的melt函数,您可以避免在Excel中手动重新构建数据,并直接在pandas中对重新构建的数据集执行分析。

相关问题