解析Pandas数据框架

2024-04-20 14:00:57 发布

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

我在一个从XML解析的数据框架中有以下数据

index                               xml_data    
0                                   \n      
1                               sessionKey  
2            JKX6G3_07092016_1476953673631  
3                                   \n      
4                                   Number  
5                                   JKX6G3  
6                                   \n      
7                            CreateDate 
8                            1468040400000  
9                                   \n      
10                              Id  
11                                83737626  
12                                       1  
13                                  \n      
14                             customerAge  
15                                      64  
16                                       1  

我喜欢将“\n”之后的每一行设为一列,与该列关联的值是下一行,例如:

sessionKey  Number  CreateDate  Id  Age

JKX6G3_07092016_1476953673631   JKX6G3  1.46804E+12 83737626    64

有没有比以下更优雅的方法: 对于doc_df.itertuples()中的行: 然后检查每一行并分析?


Tags: 数据方法框架idnumberagedataindex
2条回答
import pandas as pd
import numpy as np

# set dataframe
...

# get columns name
columns = []
count_n = 0
for i in range(0, len(df)-1):
    if (df.iloc[i]['xml_data'] == '\\n'):
        columns.append(df.iloc[i+1]['xml_data'])
        count_n += 1

# generate new df    
new_df = pd.DataFrame(columns = columns, index = np.arange(count_n))
j = 0
count = 0
# set values
for i in range(0, len(df)-2):
    if (df.iloc[i]['xml_data'] == '\\n'):
        new_df.iloc[j][df.iloc[i+1]['xml_data']] = df.iloc[i+2]['xml_data'] 
        count += 1
        if count == len(new_df):
            count = 0
            j += 1

new_df.dropna(inplace=True)

print(new_df)

结果:

                      sessionKey  Number     CreateDate        Id customerAge
0  JKX6G3_07092016_1476953673631  JKX6G3  1468040400000  83737626          64

我将查找\n的位置,添加一个来定位键,并添加2个来查找值。然后构建一个数组和随后的数据帧

v = df.xml_data.values
a, b = np.where(v == '\\n')[0][None, :] + [[1], [2]]
pd.DataFrame([v[b]], columns=v[a])

                      sessionKey  Number     CreateDate        Id customerAge
0  JKX6G3_07092016_1476953673631  JKX6G3  1468040400000  83737626          64

相关问题 更多 >