首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不使用布尔索引的情况下迭代熊猫系列

如何在不使用布尔索引的情况下迭代熊猫系列
EN

Stack Overflow用户
提问于 2019-01-21 15:00:24
回答 2查看 410关注 0票数 2

我遇到这个问题好几次了。问题是,我无法理解如何在DataFrame中迭代熊猫系列来访问单个值。

在这种情况下,我试图为熊猫DataFrame中的特定列中的每一行找到最大值,其中一些行包含列表。

df是这样的:

代码语言:javascript
复制
  Date            Number
0 2000-01-01        [1.0]
1 2000-01-02        [2.2, 5, 7.8]
2 2000-01-03        [8.2]
3 2000-01-04        [4, 11.78, 24.66]

与这一问题有关的尝试代码如下:

Find the max of two or more columns with pandas

但是,我试图替换当前的列,由于某种原因,它似乎为我的列提供了一个空列表。

预期产出如下:

代码语言:javascript
复制
  Date            Number
0 2000-01-01        1.0
1 2000-01-02        7.8
2 2000-01-03        8.2
3 2000-01-04        24.66

取行的最大值并替换原行。对于如何做到这一点,有什么建议吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-21 15:02:28

将列表理解与if-else结合使用

代码语言:javascript
复制
import ast
df.Number = df.Number.apply(ast.literal_eval)

df.Number = [max(i, default=0) if isinstance(i, list) else i for i in df.Number]

apply的替代

代码语言:javascript
复制
df.Number = df.Number.apply(lambda i: max(i, default=0) if isinstance(i, list) else i)
代码语言:javascript
复制
print (df)
         Date  Number
0  2000-01-01       1
1  2000-01-02       7
2  2000-01-03       8
3  2000-01-04      24
票数 1
EN

Stack Overflow用户

发布于 2019-01-21 15:27:19

你的数据很乱。我建议您首先尝试确保将一致的数据输入您的数据,最好是通过float系列。如果做不到这一点,您可以使用嵌套的try / except来覆盖杂乱数据所涵盖的任意数量的场景:

代码语言:javascript
复制
df = pd.DataFrame({'Dat': ['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04',
                           '2000-01-05', '2000-01-06', '2000-01-07'],
                   'Number': ['1', ['2.2', '5.0', '7.8'], '8', ['4', '11.78', '24.66'],
                              np.nan, None, []]})

def calc_max(x):
    try:
        return float(x)
    except TypeError:
        try:
            return max(map(float, x), default=np.nan)
        except TypeError:
            return np.nan

# apply function to each value in 'Number'
df['Number'] = list(map(calc_max, df['Number']))

print(df)

          Dat  Number
0  2000-01-01    1.00
1  2000-01-02    7.80
2  2000-01-03    8.00
3  2000-01-04   24.66
4  2000-01-05     NaN
5  2000-01-06     NaN
6  2000-01-07     NaN

为什么你的数据是混乱的

检查df['Number'].dtype。如果您的数据是干净的/熊猫友好的,您将看到intfloat。但在这里你可以看到object。这表示了指向任意Python对象的一系列点。然后这些对象中的一些是列表,而列表本身就是一系列指针。因此,您有一个指针的嵌套列表,而不是存储在连续内存块中的数字数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54292610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档