繁体   English   中英

从 pandas dataframe 中提取值

[英]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_3value_5value_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_1sum到字典的值。 有没有办法像上面说的那样做 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM