读取按nan行拆分的数据框,并在Python中将其重塑为多个数据框

阿邦

data1.xlsx这里有一个示例excel文件,其Sheet1内容如下:

在此处输入图片说明

现在,我想用openpyxl来阅读它pandas,然后将它们转换成新的df1df2,最后将它们另存为price和工作quantity表:

价格表:

在此处输入图片说明

数量表

在此处输入图片说明

我使用的代码:

df = pd.read_excel('./data1.xlsx', sheet_name = 'Sheet1')
df_list = np.split(df, df[df.isnull().all(1)].index) 

for df in df_list:
    print(df, '\n')

出:

         bj  Unnamed: 1  Unnamed: 2  Unnamed: 3 Unnamed: 4
0      year      2018.0      2019.0      2020.0        sum
1     price        12.0         4.0         5.0         21
2  quantity         5.0         5.0         3.0         13 

         bj  Unnamed: 1  Unnamed: 2  Unnamed: 3 Unnamed: 4
3       NaN         NaN         NaN         NaN        NaN
4        sh         NaN         NaN         NaN        NaN
5      year      2018.0      2019.0      2020.0        sum
6     price         5.0         6.0         7.0         18
7  quantity         7.0         5.0         4.0         16 

    bj  Unnamed: 1  Unnamed: 2  Unnamed: 3 Unnamed: 4
8  NaN         NaN         NaN         NaN        NaN 

          bj  Unnamed: 1  Unnamed: 2  Unnamed: 3 Unnamed: 4
9        NaN         NaN         NaN         NaN        NaN
10        gz         NaN         NaN         NaN        NaN
11      year      2018.0      2019.0      2020.0        sum
12     price         2.0         3.0         1.0          6
13  quantity         6.0         9.0         3.0         18 

     bj  Unnamed: 1  Unnamed: 2  Unnamed: 3 Unnamed: 4
14  NaN         NaN         NaN         NaN        NaN 

          bj  Unnamed: 1  Unnamed: 2  Unnamed: 3 Unnamed: 4
15       NaN         NaN         NaN         NaN        NaN
16        sz         NaN         NaN         NaN        NaN
17      year      2018.0      2019.0      2020.0        sum
18     price         8.0         2.0         3.0         13
19  quantity         5.0         4.0         3.0         12 

如何在Python中做到这一点?非常感谢。

耶斯列尔

采用:

#add header=None for default columns names
df = pd.read_excel('./data1.xlsx', sheet_name = 'Sheet1', header=None)

#convert columns by second row
df.columns = df.iloc[1].rename(None)

#create new column `city` by forward filling non missing values by second column
df.insert(0, 'city', df.iloc[:, 0].mask(df.iloc[:, 1].notna()).ffill())
#convert floats to integers 
df.columns = [int(x) if isinstance(x, float) else x for x in df.columns]
#convert column year to index
df = df.set_index('year')

print (df)
         city    2018    2019    2020  sum
year                                      
bj         bj     NaN     NaN     NaN  NaN
year       bj  2018.0  2019.0  2020.0  sum
price      bj    12.0     4.0     5.0   21
quantity   bj     5.0     5.0     3.0   13
NaN        bj     NaN     NaN     NaN  NaN
sh         sh     NaN     NaN     NaN  NaN
year       sh  2018.0  2019.0  2020.0  sum
price      sh     5.0     6.0     7.0   18
quantity   sh     7.0     5.0     4.0   16
NaN        sh     NaN     NaN     NaN  NaN
NaN        sh     NaN     NaN     NaN  NaN
gz         gz     NaN     NaN     NaN  NaN
year       gz  2018.0  2019.0  2020.0  sum
price      gz     2.0     3.0     1.0    6
quantity   gz     6.0     9.0     3.0   18
NaN        gz     NaN     NaN     NaN  NaN
NaN        gz     NaN     NaN     NaN  NaN
sz         sz     NaN     NaN     NaN  NaN
year       sz  2018.0  2019.0  2020.0  sum
price      sz     8.0     2.0     3.0   13
quantity   sz     5.0     4.0     3.0   12

df1 = df.loc['price'].reset_index(drop=True)
print (df1)
  city  2018  2019  2020 sum
0   bj  12.0   4.0   5.0  21
1   sh   5.0   6.0   7.0  18
2   gz   2.0   3.0   1.0   6
3   sz   8.0   2.0   3.0  13

df2 = df.loc['quantity'].reset_index(drop=True)
print (df2)
  city  2018  2019  2020 sum
0   bj   5.0   5.0   3.0  13
1   sh   7.0   5.0   4.0  16
2   gz   6.0   9.0   3.0  18
3   sz   5.0   4.0   3.0  12

上次写DataFrames到现有文件可以通过mode='a'参数的链接

with pd.ExcelWriter('data1.xlsx', mode='a') as writer:  
    df1.to_excel(writer, sheet_name='price')
    df2.to_excel(writer, sheet_name='quantity')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将多行按列值组合为一行,并根据连接的行数将其拆分为多个数据框(对于多列)

来自分类Dev

Python数据框重塑

来自分类Dev

按行名称合并多个数据框

来自分类Dev

在熊猫中将数据框细分为多个数据框

来自分类Dev

将Python数据框拆分为多个数据框(所选行相同)

来自分类Dev

Python Pandas重塑数据框

来自分类Dev

融化数据框,重塑高个数据框

来自分类Dev

熊猫使用NaN旋转或重塑数据框

来自分类Dev

Python从多个数据框创建组合

来自分类Dev

在python中排序多个数据框

来自分类Dev

将表拆分为多个数据框

来自分类Dev

根据来自另一个数据框的值将数据框拆分为多个数据框

来自分类Dev

如何在R中按行对数据帧进行排序,然后将其拆分为多个数据帧?

来自分类Dev

获取一长串项目并重塑为数据框“行”-pandas python 3

来自分类Dev

重塑具有多个ID的数据框

来自分类Dev

使用多个索引重塑熊猫数据框

来自分类Dev

熊猫-根据日期将数据框拆分为多个数据框?

来自分类Dev

将pandas数据框拆分为行数相等的多个数据框

来自分类Dev

根据列名称将大型数据框拆分为多个数据框

来自分类Dev

如何通过列索引将数据框拆分为多个数据框

来自分类Dev

将数据框重塑为宽大的形状

来自分类Dev

将矩阵重塑为数据框

来自分类Dev

将数据框变量重塑为列表

来自分类Dev

连接多个数据框

来自分类Dev

加入多个数据框

来自分类Dev

按一列右连接多个数据框

来自分类Dev

在Pandas数据框中将多列拆分为行

来自分类Dev

在熊猫数据框中将行划分/拆分为多行

来自分类Dev

如何在数据框中将行拆分为列

Related 相关文章

热门标签

归档