解析数据并生成那些组头。 Python 3,熊猫

问题描述 投票:1回答:1

我正在解析.csv file(你可以在这里看到示例文件。)我正在提取第2行和第7行的数据。没问题。这就是我这样做的方式。

import pandas as pd
import numpy as np

df = pd.read_csv("datas.csv", index_col=0, header=None)
d = {'YSS':'Yahoo!リスティング 12月分 12/1〜12/31',
     'YDNRT':'Yahoo!リマーケティング 12月分 12/1〜12/31',
     'YDN':' Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31',
     'GSN':'Googleリスティング 12月分 12/1〜12/31',
     'GDNRM':'Googleリマーケティング 12月分 12/1〜12/31',
     'GDN':'Googleディスプレイネットワーク 12月分 12/1〜12/31'}

pat = r'({})'.format('|'.join(d.keys()))
df.loc['アカウント名'] = df.loc['アカウント名'].str.extract(pat, expand=False).dropna().map(d)
df.loc['利用額(Fee抜き)'] = df.loc['利用額(Fee抜き)'].astype(str).apply(lambda x: x.split(".")[0])

df1 = df.loc[['アカウント名', '利用額(Fee抜き)']]
df1 = df1.T

df1.columns = ['項目','金額']

df1['数量'] = 1

df1['単位'] = "式"

df1['単価'] = np.nan

wow = df1[['項目','数量','単位','単価', '金額']]

newFile = wow.shift(1)

newFile['項目'] = newFile['項目'].fillna(df.loc['クライアント名'])

newFile.loc[newFile['項目'].str.contains('プレサンス'),['数量','単位','単価', '金額']] = ['','','','']

pos = newFile.index[newFile['項目'].str.contains('プレサンス')]

d = {}
i = 0
for p in pos:
    if p == pos[0]:
        d[p] = newFile.loc[:pos[i+1]-1].append(pd.Series('',newFile.columns), ignore_index=True)
    elif (i + 1) > len(pos) - 1:
        d[p] = newFile.loc[pos[i-1]+1:]
    else:
        d[p] = newFile.loc[p:pos[i+1]-1].append(pd.Series('',newFile.columns), ignore_index=True)
    i = i + 1
pd.concat(d, ignore_index=True)
p.to_csv('newfile.csv', index=False)

使用新列创建新的.csv文件。你可以在这里看到它。 https://imgur.com/a/5w63Yht但我还需要做一件事。

在原来的qazxsw poi第1行有公司名称。我想解析那些公司名称并将其放在图像中的每个组的头上:qazxsw poi也需要删除总和...

我不太确定是否有可能......

python-3.x pandas pandas-datareader
1个回答
2
投票

您可以通过索引原始df并调用file's来替换https://imgur.com/a/4T2WxYtNaN,然后过滤包含字符串'項目'的行并用空字符串列表覆盖行值,首先我们fillna行向下1,这样它就会使标题:

'プレサンス'

现在因为你想要添加填充以使其更具可读性,我们可以存储总数所在的索引位置,然后迭代这些并切片df,将这些添加到dict然后调用shift来垂直堆叠填充的切片:

In[111]:

newFile = df1.shift(1)
newFile['項目'] = newFile['項目'].fillna(df.loc['クライアント名'])
newFile.loc[newFile['項目'].str.contains('プレサンス'),['数量','単位','単価', '金額']] = ['','','','']
newFile
Out[111]: 
                                     項目      金額 数量 単位   単価
1                        プレサンス ロジェ 和泉中央                   
2      Yahoo!リスティング 12月分 12/1〜12/31 YSS   91188  1  式  NaN
3        Yahoo!リマーケティング 12月分 12/1〜12/31   25649  1  式  NaN
4    Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   13211  1  式  NaN
5          Googleリスティング 12月分 12/1〜12/31  131742  1  式  NaN
6        Googleリマーケティング 12月分 12/1〜12/31   35479  1  式  NaN
7    Googleディスプレイネットワーク 12月分 12/1〜12/31   18999  1  式  NaN
8                          プレサンス グラン 茨木                   
9      Yahoo!リスティング 12月分 12/1〜12/31 YSS  113373  1  式  NaN
10       Yahoo!リマーケティング 12月分 12/1〜12/31   28775  1  式  NaN
11   Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   19010  1  式  NaN
12         Googleリスティング 12月分 12/1〜12/31  158389  1  式  NaN
13       Googleリマーケティング 12月分 12/1〜12/31   45530  1  式  NaN
14   Googleディスプレイネットワーク 12月分 12/1〜12/31   23224  1  式  NaN
15                         プレサンス ロジェ 江坂  

现在创建每个切片的dict并附加一个空行:

concat
© www.soinside.com 2019 - 2024. All rights reserved.