有一些测试数据的CSV文件和一些列有错误值记录。想要替换特定列中的错误值,如+/-9.900000e+37,name匹配模式,使用-9999。
我现在用的是下面的
import pandas as pd
import numpy as np
df_1 = pd.read_csv('test_file.csv', sep='\t')
df_1['Abc11'] = np.where(df_1['Abc11'] > 9999, -9999, df_1['Abc11'])
有超过50列的模式,是否有一个容易的更新所有列一次
输入:
| Abc11| ABC12| Abc13| ABC14| ABC15| Abc16| ABC16| xyz|评论|
| --|--|--|--|--|--|--|--|--|
| 13.3435|-9.900000e+37|七三二一四|-9.900000e+37|-9.900000e+37|-9.900000e+37|-9.900000e+37| 0.3435|三|
| -9.900000e+37|-9.900000e+37| 98999999999993400000000000000000000.000000|-9.900000e+37|-9.900000e+37|-9.900000e+37|-9.900000e+37| 0.3435|三|
| 13.3435|-9.900000e+37|七三二一四|9.900000 e +37|-9.900000e+37|-9.900000e+37| 9.900000 e +37| 0.3435|三|
| 13.3435|-9.900000e+37| 98999999999993400000000000000000000.000000| 9.900000 e +37|-9.900000e+37|-9.900000e+37| 9.900000 e +37| 0.3435|三|
| 9.900000 e +37|-9.900000e+37| 98999999999993400000000000000000000.000000|-9.900000e+37|-9.900000e+37|-9.900000e+37|-9.900000e+37| 0.3435|三|
如果列名以ABC开头|Abc和值> 9999或< -9999,则替换为-9999
所需输出:相同名称模式的列数可以超过50
| Abc11| ABC12| Abc13| ABC14| ABC15| Abc16| ABC16| xyz|评论|
| --|--|--|--|--|--|--|--|--|
| 13.3435|九九九九|七三二一四|九九九九|九九九九|九九九九|九九九九|0.3435|三|
| 九九九九|九九九九|九九九九|九九九九|九九九九|九九九九|九九九九|0.3435|三|
| 13.3435|九九九九|七三二一四|九九九九|九九九九|九九九九|九九九九|0.3435|三|
| 13.3435|九九九九|九九九九|九九九九|九九九九|九九九九|九九九九|0.3435|三|
| 九九九九|九九九九|九九九九|九九九九|九九九九|九九九九|九九九九|0.3435|三|
2条答案
按热度按时间nukf8bse1#
您可以使用
str.match
查找名称以abc
开头的列(在任何情况下),然后使用numpy.where
将超出范围的值设置为-9999
:输出量:
iq3niunx2#
这可能有助于