[英]Extracting values from pandas dataframe
我有一个 pandas dataframe 如下。
df =
col_1 sum value_3 value_5 value_7
0 4.0 45.0 NaN 0.9 9.3
1 4.0 NaN NaN 4.5 NaN
2 49.2 10.8 3.4 NaN NaN
我想遍历每一行,并且从每一行开始,我希望将以下信息放入字典中。 让sum_dict
成为字典。 对于每一行,默认情况下,我希望col_1
中的值是列sum
中的键和值是字典的值,即从第一行开始,字典如下所示
sum_dict = {4.0: 45.0}
除了上述之外,如果列value_3
、 value_5
、 value_7
中存在一个值,我希望从列名中提取列号,这将作为键添加到字典中,列中存在的值将是值到字典中的键。 同样,对于第一行, sum_dict
如下所示:
sum_dict = {4.0: 45.0, 5.0: 0.9, 7.0: 9.3}
从第二行开始, sum_dict
应该如下所示:
sum_dict = {4.0: NaN, 5.0: 4.5}
有没有办法做到这一点?
现在我写了以下内容:
for idx,row in df.iterows():
sum_dict = {}
sum_dict[row['col_1']] = row['sum']
上面的代码只是从col_1
和sum
到字典的值。 有没有办法像上面说的那样做 rest?
尝试:
out = []
for _, x in df.iterrows():
out.append(
{
x["col_1"]: x["sum"],
**{
k: v
for k, v in zip(
(3.0, 5.0, 7.0), x[["value_3", "value_5", "value_7"]]
)
if pd.notna(v)
},
}
)
print(out)
印刷:
[{4.0: 45.0, 5.0: 0.9, 7.0: 9.3},
{4.0: nan, 5.0: 4.5},
{49.2: 10.8, 3.0: 3.4}]
使用与@Andrej Kesely 建议的类似方法,如果您不想手动键入,则可以使用float("".join(char for char in str(key) if char.isnumeric()))
作为字典键列索引:
import pandas as pd
# == Example DataFrame ========================================
df = pd.DataFrame(
{
'col_1': [4.0, 4.0, 49.2],
'sum': [45.0, None , 10.8],
'value_3': [None, None, 3.4],
'value_5': [0.9, 4.5, None],
'value_7': [9.3, None, None],
}
)
# == Solution =================================================
sum_dicts = []
for idx, row in df.iterrows():
sum_dict = {
row["col_1"]: row["sum"],
**{
float("".join(char for char in str(key) if char.isnumeric())): value
for key, value in row.items()
if key not in ["col_1", "sum"] and pd.notna(value)
},
}
sum_dicts.append(sum_dict)
print(sum_dicts)
# Prints:
#
# [{4.0: 45.0, 5.0: 0.9, 7.0: 9.3}, {4.0: nan, 5.0: 4.5}, {49.2: 10.8, 3.0: 3.4}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.