csv 如何将panda Dataframe 中的两行设置为列标题

8hhllhi2  于 2023-03-27  发布在  其他
关注(0)|答案(3)|浏览(405)

我已经看到了如何使用双索引,但我还没有看到如何使用两行的列标题。这可能吗?
例如,第1行是一系列重复的日期:2016年,2016年,2015年,2015
第2行是一系列重复的数据。美元销售额、单位销售额、美元销售额、单位销售额。
因此,每个“美元销售额”标题实际上都与上面一行中的日期相关联。
后续行是包含数据的单个项。
有没有一种方法可以做一个groupby或一些方法,我可以有两个列标题?最终,我想排队的“美元销售”作为一个系列的日期,这样我就可以使一个漂亮的图表。不幸的是,有多个列之前的下一个“美元销售”值。(不仅仅是一个“单位销售额”列)。另外,如果我删除上面的日期行,就不会有“美元销售额”与每个日期相关联的链接。

8zzbczxx

8zzbczxx1#

如果使用pandas.read_csv()pandas.read_table(),可以为header参数提供一个索引列表,以指定要用于列标题的行。Python将在df.columns中为您生成pandas.MultiIndex

df = pandas.read_csv('DollarUnitSales.csv', header=[0,1])

也可以使用两个以上的行或非连续行来指定列标题:

df = pandas.read_table('DataSheet1.csv', header=[0,2,3])
kxxlusnw

kxxlusnw2#

可以从行创建MultiIndex并将其分配为新的列标签。
例如,要进行以下转换,请使用pd.MultiIndex.from_frame()

df = pd.DataFrame([[2016, 2016, 2015, 2015], 
                   ['Dollar Sales', 'Unit Sales', 'Dollar Sales', 'Unit Sales'], 
                   [1, 2, 3, 4], [5, 6, 7, 8]], columns=[*'ABCD'])

new_labels = pd.MultiIndex.from_frame(df.iloc[:2].T.astype(str), names=['Year', 'Sales'])
df1 = df.set_axis(new_labels, axis=1).iloc[2:]

也可以从旧的列标签和数据框行创建MultiIndex。例如,要进行以下转换,请使用pd.MultiIndex.from_arrays()

df = pd.DataFrame([['Dollar Sales', 'Unit Sales', 'Dollar Sales', 'Unit Sales'], 
                   [1, 2, 3, 4], [5, 6, 7, 8]], columns=[2016, 2016, 2015, 2015])

new_labels = pd.MultiIndex.from_arrays([df.columns, df.iloc[0]], names=['Year', 'Sales'])
df1 = df.set_axis(new_labels, axis=1).iloc[1:]

注意:需要注意的一件重要的事情是 Dataframe 的数据类型对于它所保存的数据来说可能并不理想;astype(int)等最终可能是必要的。
此外,如果索引应该被重置,则可能需要reset_index(drop=True)

kmpatx3s

kmpatx3s3#

是的,在pandas中可以使用两行的列标题。您可以通过为列标题创建MultiIndex对象来实现这一点。MultiIndex是一个分层索引对象,它使您能够在pandas DataFrame中表示更高维的数据。
下面是一个如何使用MultiIndex创建具有两行列标题的DataFrame的示例:

import pandas as pd

# Create the column index as a MultiIndex
cols = pd.MultiIndex.from_tuples([
    ('2016', 'Dollar Sales'),
    ('2016', 'Unit Sales'),
    ('2015', 'Dollar Sales'),
    ('2015', 'Unit Sales')
])

# Create a DataFrame with random data
data = pd.DataFrame(
    data=[[10, 20, 30, 40], [50, 60, 70, 80]],
    columns=cols
)

print(data)

这将输出一个带有两行列标题的DataFrame:

2016           2015          
  Dollar Sales Unit Sales Dollar Sales Unit Sales
0           10         20          30         40
1           50         60          70         80

然后,您可以使用MultiIndex对象来选择和操作数据:

# Select the 'Dollar Sales' columns
dollar_sales = data.loc[:, (slice(None), 'Dollar Sales')]

# Group by date and sum the 'Dollar Sales'
grouped = dollar_sales.groupby(level=0, axis=1).sum()

print(grouped)

这将输出一个DataFrame,其中“Dollar Sales”列按日期求和:

2015  2016
0    30    10
1    70    50

然后,您可以使用此分组数据创建图表。
希望这能有所帮助!

相关问题