如何解决可以使用 dtype 进行赋值,以便为数字设置 -99.0,为文本设置 X 吗?
我有 20 多列数据。必须有一种非手动方式来使用数据类型,以便用 -99.0(我使用的软件将 -99.0 识别为数字缺失)和 X(我使用的软件将 X 识别为文本缺失)填充空格,如果文本.我搜索并只看到了说明所有列名称的手动方式。如果列名从未更改但从项目到项目,这将重复工作,我不会总是有相同的列或列名。试图自动化这一点。这是一个小例子:
ID | 项目 | 来自 | 至 | 值1 | Value2 |
---|---|---|---|---|---|
1 | AAA | 0 | 10 | 15 | 0.578 |
1 | AAA | 10 | 20 | 7.6 | |
2 | 0 | 100 | 14 | 0.777 | |
2 | 100 | 200 | 6.5 | ||
1 | ABA | 0 | 5 | 22.7 | 0.431 |
1 | BBB | 15 | 20 | 0.8 | 17.4 |
2 | 0 | 10 | 1.200 | ||
2 | BBB | 10 | 20 | 6.9 | 200.8 |
我知道我可以这样做,但它只能做数字:
result.fillna(0,inplace=True)
我也可以试试这个,但输入 -99.0:
dataframe[list_of_columns].replace(r'\s+',regex=True)
但是这是非常手动的,我希望这是自动化的,因为我有很多项目并且希望节省时间并且它只处理数字列,而不是文本列。
我找到了这个,但我无法将文本空白转换为“X”。我认为它会类似于我保存 list_of_columns 然后有一个 for 循环?
def recode_empty_cells(dataframe,list_of_columns):
for column in list_of_columns:
dataframe[column] = dataframe[column].replace(r'\s+',np.nan,regex=True)
dataframe[column] = dataframe[column].fillna(0)
return dataframe
最后我希望它看起来像这样:
ID | 项目 | 来自 | 至 | 值1 | Value2 |
---|---|---|---|---|---|
1 | AAA | 0 | 10 | 15 | 0.578 |
1 | AAA | 10 | 20 | 7.6 | -99.0 |
2 | X | 0 | 100 | 14 | 0.777 |
2 | X | 100 | 200 | 6.5 | -99.0 |
1 | ABA | 0 | 5 | 22.7 | 0.431 |
1 | BBB | 15 | 20 | 0.8 | 17.4 |
2 | X | 0 | 10 | -99.0 | 1.200 |
2 | BBB | 10 | 20 | 6.9 | 200.8 |
提前致谢!
解决方法
如果您的列具有正确的 dtypes
,那么您可以使用 DataFrame.select_dtypes
。选择数字类型并用-99
填充,然后排除数字类型并用X
填充。然后将结果连接回来并重新索引(如果您关心列排序)。
import pandas as pd
import numpy as np
df = (pd.concat([df.select_dtypes(include=np.number).fillna(-99),df.select_dtypes(exclude=np.number).fillna('X')],axis=1)
.reindex(df.columns,axis=1))
ID Project From To Value1 Value2
0 1 AAA 0 10 15.0 0.578
1 1 AAA 10 20 7.6 -99.000
2 2 X 0 100 14.0 0.777
3 2 X 100 200 6.5 -99.000
4 1 ABA 0 5 22.7 0.431
5 1 BBB 15 20 0.8 17.400
6 2 X 0 10 -99.0 1.200
7 2 BBB 10 20 6.9 200.800
另一个有效的选择是使用 select_dtypes
获取列,然后手动填充。由于我们只关心列标签,而且一列总是有一个 dtype
,我们可以只使用 .head(1)
。事实证明,由于 df.select_dtypes
返回 DataFrame 的一个切片,对于较大的 DataFrame 来说它会变慢,但我们只需要一行。
num_cols = df.head(1).select_dtypes(include=np.number).columns
oth_cols = df.head(1).select_dtypes(exclude=np.number).columns
df[num_cols] = df[num_cols].fillna(-99)
df[oth_cols] = df[oth_cols].fillna('X')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。