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