如何解析excel数据并将其修改为所需的数据框架?

2024-05-17 12:56:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个excel,如下所示: enter image description here

它就像一个数据帧:

    ItemName     Category  Quantity
0   ProductA  Electronics       NaN
1          A  Electronics       1.0
2          B  Electronics       2.0
3          C  Electronics       3.0
4          D  Electronics       4.0
5          E  Electronics       5.0
6          F  Electronics       6.0
7   ProductB     Hardware       NaN
8          G     Hardware       7.0
9          H     Hardware       8.0
10         I     Hardware       9.0
11         J     Hardware      10.0
12  ProductC     Software       NaN
13         K     Software      11.0
14         L     Software      12.0

任何类别的第一个项目名称都是项目类。我需要将这个项目类(ProductA、ProductB和ProductC)与数据分开,这样当我调用df['ProductA']时,我就可以将所有相关信息打印到此项目名称。(A、B、C、D、E和F)

到目前为止,我已经尝试从数据中提取产品A、B和C

import pandas as pd
import numpy as np
df = pd.read_excel(r'testing.xlsx')

index = df['Quantity'].index[df['Quantity'].apply(np.isnan)]
index_list=index.values.tolist()

for index in index_list:
    print(df['ItemName'][index])

但是我如何修改代码以便调用df['ProductA']并获取所有相关信息呢


Tags: 数据项目dfindexsoftwarenanexcelhardware
2条回答

可以使用以下代码创建名为“ProductClass”的列

import pandas as pd
import numpy as np

df = pd.read_excel('Products.xlsx')

df['ProductClass'] = np.where(df['Quantity'].isna(), df['ItemName'], np.nan)

df['ProductClass']= df['ProductClass'].ffill()

df = df.dropna().reset_index().drop('index', axis=1)

然后,您可以获得像这样的产品类的所有行

print(df[df['ProductClass'] == 'ProductA'])
OUTPUT
  ItemName     Category  Quantity ProductClass
0        A  Electronics       1.0     ProductA
1        B  Electronics       2.0     ProductA
2        C  Electronics       3.0     ProductA
3        D  Electronics       4.0     ProductA
4        E  Electronics       5.0     ProductA
5        F  Electronics       6.0     ProductA

试试这个:

import pandas as pd
import numpy as np
df = pd.read_excel(r'testing.xlsx')

index = df['Quantity'].index[df['Quantity'].apply(np.isnan)]
index_list=index.values.tolist()
    
    
dct = {}

for i in range(len(index_list)):
    print(df['ItemName'][index_list[i]])
    if i+1 != len(index_list):
        dct[df['ItemName'][index_list[i]]] = df.iloc[(index_list[i]+1):index_list[i+1], :]
    else:
        dct[df['ItemName'][index_list[i]]] = df.iloc[(index_list[i]+1):len(df), :]
    

print(dct['ProductA'])
print(dct['ProductB'])
print(dct['ProductC'])

相关问题 更多 >