簡體   English   中英

Pandas 在不同大小的列中拆分列

[英]Pandas Split Columns in Columns different sizes

Pandas_DataFrame --已編輯--['已解決']

我正在使用 tabula 將 pdf 發票轉換為 pandas dataframe,但最后一列不是很好。 我想拆分名為“PVF c/ IVA PVA s/Tx Desc% Tx Inf”的最后一行。 IVA% P.單位。 總液體。 我想在每個空間中拆分,並有新的列 ['PVFc/IVA', 'PVAs/Tx', 'Desc%' 'TxInf.', 'IVA%', 'P.Unit.', 'Total Liq .'],並且應該為每個空格拆分行。 第 2 行“7,41”、“6,30”、“65,0”、“0,03”、“6”、“2,24”、“22,40”。

我已經搜索並找到了如何拆分,但是......一些行將拆分為 7 列,而其他行將拆分為 6 列,我收到錯誤消息。

有關更多信息,請查看“PVP c/Iva”為 NaN 或“Esc”的每一行。 是 .NETT' 沒有 'PVFc/IVA' 值,所以該列的 (len) 是 6。我的分析可能會在該行中插入 0,00 作為前綴,以便全部具有 7 列 len()。

歡迎任何解決方案,我從 Python 和 pandas 開始......謝謝你的時間

我應用了@Ahmed Sayed 的部分代碼,並且取得了進展,將 Nan Colums 與其他列連接起來,首先我將 Nan 替換為空格

dataframe['placeHolderColumn'] = dataframe['placeHolderColumn'].fillna(value='')

經過一些嘗試e錯誤,我發現有時會有多個空格,所以我將所有空格替換為一個空格,然后替換'*'

dataframe["newColumn"]= dataframe['newColumn'].str.replace('  ','*')

我創建了一個新列來確認拆分元素

dataframe["count2"]= dataframe['newColumn'].str.count('\*', re.I)

我得到這個結果

變換后的圖像

所以,作為最后一項工作,我應用了拆分方法,

dataframe[['c1','c2','c3','c4','c5','c6']] = dataframe['newColumn'].str.split('*', expand=True)

但我得到這個錯誤

最后一個錯誤

--FOUND-- 我必須傳遞另一個列名,我只傳遞了 6 個新列,我有 7 個值

dataframe[['c1','c2','c3','c4','c5','c6', 'c7']] = dataframe['newColumn'].str.split('*', expand=True)

所以這里的問題是單元格在該列中沒有相同數量的值,我們可以通過計算值的數量來解決這個問題,無論我們看到缺失值在哪里,我們都可以在開頭添加一個虛擬 00 這樣更容易以便我們以后分開。

首先,讓我們創建一個包含空格數的列。 這給出了該行中值的數量。

import re
df["count"]= df['PVF c/ IVA PVA s/Tx Desc% Tx Inf. IVA% P.Unit. Total Liq.'].str.count(' ', re.I)

然后,如果計數小於我們的預期,讓 append 在每個單元格字符串的開頭加一個零

# here we compare the number of spaces to 5, 5 is for the short cells that need a dummy 00 at the beginning
df.loc[df["count"] <= 5, 'placeHolderColumn'] = '00 '  #notice there is a space after the zeros
# now let's create a new column and merge the placeHolderColumn column to the old values column
df['newColumn'] = df['placeHolderColumn'] + df['PVF c/ IVA PVA s/Tx Desc% Tx Inf. IVA% P.Unit. Total Liq.'].astype(str) 

最后,我們可以將列拆分為

df[['c1','c2','c3','c4','c5','c6']] = df['newColumn'].str.split(' ', expand=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM