Python 如何对字符串形式的数字列表的数据帧列求和?
我有一个如下所示的数据帧:Python 如何对字符串形式的数字列表的数据帧列求和?,python,pandas,dataframe,data-wrangling,Python,Pandas,Dataframe,Data Wrangling,我有一个如下所示的数据帧: | Unit | Charges | |----------|---------------------------------| | DW01-100 | trash(15); pest(2) | | DW01-101 | trash(15); pest(3) | | DW01-102 | garage(150); trash(15); pest(3) | |
| Unit | Charges |
|----------|---------------------------------|
| DW01-100 | trash(15); pest(2) |
| DW01-101 | trash(15); pest(3) |
| DW01-102 | garage(150); trash(15); pest(3) |
| DW01-103 | pest(3); trash(15) |
| DW01-104 | trash(15); pest(3) |
| DW11-407 | trash(15); pest(3); carport(35) |
| DW11-408 | garage(200); trash(15); pest(3) |
| DW11-409 | trash(15); pest(3) |
| DW11-410 | carport(35); trash(15); pest(3) |
| DW11-411 | NaN |
我想计算所有的费用,即括号中的数字,然后求和并存储在一列中。到目前为止,我使用的是正则表达式findall
df['Charges'] = df['Charges'].str.findall(r"\((.+?)\)")
提取括号中的所有数字。现在我在每个单元格中都有一个以文本形式存储的数字列表
我陷入了下一步,那就是将每个数字字符串转换成一个浮点数,并对列中每个单元格的浮点数列表求和。
所需的输出应如下所示:
| Unit | Charges |
|----------|---------------------------------|
| DW01-100 | trash(15); pest(2) |
| DW01-101 | trash(15); pest(3) |
| DW01-102 | garage(150); trash(15); pest(3) |
| DW01-103 | pest(3); trash(15) |
| DW01-104 | trash(15); pest(3) |
| DW11-407 | trash(15); pest(3); carport(35) |
| DW11-408 | garage(200); trash(15); pest(3) |
| DW11-409 | trash(15); pest(3) |
| DW11-410 | carport(35); trash(15); pest(3) |
| DW11-411 | NaN |
单位
收费
总费用
DW01-100
垃圾(15);害虫(2)
17
DW01-101
垃圾(15);害虫(3)
18
DW01-102
车库(150);垃圾(15);害虫(3)
168
尝试.str.extractall()
:
印刷品:
单位费用合计费用
0 DW01-100垃圾桶(15);害虫(2)17.0
1台DW01-101垃圾箱(15台);害虫(3)18.0
2个DW01-102车库(150);垃圾(15);害虫(3)168.0
3株DW01-103害虫(3株);垃圾(15)18.0
4台DW01-104垃圾箱(15台);害虫(3)18.0
5台DW11-407垃圾箱(15台);害虫(3);车棚(35)53.0
6个DW11-408车库(200);垃圾(15);害虫(3)218.0
7个DW11-409垃圾桶(15个);害虫(3)18.0
8个DW11-410车库(35个);垃圾(15);害虫(3)53.0
9 DW11-411楠楠楠
另一种方法:-将列表序列转换为数据帧,并使用df.astype
转换为浮点,然后在轴=1上求和:
s = df['Charges'].str.findall(r"\((.+?)\)").dropna()
df['Summed Charges'] = pd.DataFrame(s.tolist(),index=s.index).astype(float).sum(1)
谢谢你,安德烈!这正是我需要的。你对我尝试失败的原因有什么解释吗?@saujosai在第9行9
你有NaN
值。因此,您试图迭代这个NaN
值,得到的是TypeError。
print(df)
Unit Charges Summed Charges
0 DW01-100 trash(15); pest(2) 17.0
1 DW01-101 trash(15); pest(3) 18.0
2 DW01-102 garage(150); trash(15); pest(3) 168.0
3 DW01-103 pest(3); trash(15) 18.0
4 DW01-104 trash(15); pest(3) 18.0
5 DW11-407 trash(15); pest(3); carport(35) 53.0
6 DW11-408 garage(200); trash(15); pest(3) 218.0
7 DW11-409 trash(15); pest(3) 18.0
8 DW11-410 carport(35); trash(15); pest(3) 53.0
9 DW11-411 NaN NaN