我有一个很大的数据帧,它看起来如下所示:

df1['A'].ix[1:3]
2017-01-01 02:00:00    [33, 34, 39]
2017-01-01 03:00:00    [3, 43, 9]

我想用11替换每个大于9的元素.

因此,上面示例的期望输出是:

df1['A'].ix[1:3]
2017-01-01 02:00:00    [11, 11, 11]
2017-01-01 03:00:00    [3, 11, 9]

编辑:

我的实际数据帧大约有20,000行,每行都有大小为2000的列表.

有没有办法对每一行使用numpy.minimum函数?我想它会比list comprehension方法更快吧?

推荐答案

您可以将applylist comprehension配合使用:

df1['A'] = df1['A'].apply(lambda x: [y if y <= 9 else 11 for y in x])
print (df1)
                                A
2017-01-01 02:00:00  [11, 11, 11]
2017-01-01 03:00:00    [3, 11, 9]

更快的解决方案是首先转换为numpy array,然后使用numpy.where:

a = np.array(df1['A'].values.tolist())
print (a)
[[33 34 39]
 [ 3 43  9]]

df1['A'] = np.where(a > 9, 11, a).tolist()
print (df1)
                                A
2017-01-01 02:00:00  [11, 11, 11]
2017-01-01 03:00:00    [3, 11, 9]

Database相关问答推荐

如何使授权服务器与外部数据库保持同步?

1-2400之间格式奇怪的时间数据

在 SQL Server 中以编程方式创建数据库

如何在我的 Rails 应用程序中避免竞争条件?

使用 cloud-spanner 进行本地开发

PostgreSQL 将列从整数转换为文本

Meteor 如何执行数据库迁移?

将所有数据库列设置为 NOT NULL 是一种好习惯吗?

如何在数据库中搜索和替换字符串的所有实例?

Sqlite 和 Python - 使用 fetchone() 返回字典?

限制 SQL JOIN

PostgreSQL 唯一索引和字符串大小写

Rails 新手,设置 db 然后运行 ​​rake db:create/migrate

将内存数据库保存到磁盘

SQL Server Express LocalDB 可以远程连接吗?

XML、CSV 或数据库格式的 ICD-9 代码列表

如何在数据库中获取原始的created_at值(不是转换为 ActiveSupport::TimeWithZone 的对象)

分离实体和被管理实体

MySQL 查询,MAX() + GROUP BY

如何自动填充 SQLAlchemy 数据库字段? (Flask-SQLAlchemy)