Python小程序解决不规则转置问题

情景引入

Python小程序解决不规则转置问题_第1张图片
如上图,一家上市公司只有一行数据,对应多次财务违规年份,想要变成纵向的数据,即一次财务违规对应一行数据,一家上市公司有多行数据的形式(如果有多次违规),如下图所示:
Python小程序解决不规则转置问题_第2张图片

实现过程

一、先根据“,”将违规年份进行分列
二、编写Python程序,思路是逐行进行处理,在每一行中判断单元格中的违规年份是否为空,不为空则新建一行,将该年份写入作为一行新的数据,具体代码如下:

import csv
import pandas as pd
import numpy as np


df0=pd.DataFrame({
    'symbol':[],
    'declaredate':[],
    'promulgator':[],
    'supervisor':[],
    'violationtype':[],
    'violationyear':[],
    'punishmenttype':[],
    'penalty':[],
    'violationyear0':[]
})

df=pd.read_csv('test.csv',encoding='gbk')
# print(df)
groups = df.groupby('symbol')
for key,value in groups:
    new_data = value.reset_index(drop=True)
    # print(new_data)
    for m in range(8, 19):
        if new_data.iloc[0, m] != "":
            print(new_data.iloc[0, m])
            x = pd.DataFrame({
                'symbol': [new_data.iloc[0, 0]],
                              'declaredate':[new_data.iloc[0,1]],
                              'promulgator':[new_data.iloc[0,2]],
                              'supervisor':[new_data.iloc[0,3]],
                              'violationtype':[new_data.iloc[0,4]],
                              'violationyear':[new_data.iloc[0,5]],
                              'punishmenttype':[new_data.iloc[0,6]],
                              'penalty':[new_data.iloc[0,7]],
                              'violationyear0': [new_data.iloc[0, m]]
                              })
            print(x)
            df0 = pd.concat([df0, x])
            # print(df0)
            # df0 = df0.dropna()
            # print(df0)
print(df0)
df0.to_csv('res.csv')

你可能感兴趣的:(Python)