微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当熊猫数据框中的列已经有一些大写值时,如何将其更改为大写?

如何解决当熊猫数据框中的列已经有一些大写值时,如何将其更改为大写?

我是 Python 和 StackOverflow 的新手。

我正在尝试转换数据框 use_ab 列中的一些值:

这是我的专栏的样子:

df['use_ab'].value_counts()

False    534167
FALSE     15222
True      12724
TRUE       1023

我想做的是将所有值转换为大写。

我试过这个代码

df['use_ab'] = df['use_ab'].str.upper()

它将“True”和“False”转换为大写,其余为 NaN 值,并给出以下输出

FALSE    15222
TRUE      1023

请帮我将此列转换为大写。

解决方法

你有一个字符串和布尔值的混合列(也许还有其他一些东西),而且它的 dtype 几乎肯定是“对象” - 你应该检查一下,请确认。

解决方案:您可以(并且应该)在读取时指定有问题的列的 dtype,还可以在读取时指定所有 true 和 false 值:

pd.read_csv(...,dtype={'use_ab': bool}),true_values=['TRUE','True',True],false_values=['FALSE','False',False])

特别注意 string 'False' 和 bool False 不是一回事!并且尝试使用 .str 不会转换 bools

回复:df.dtypes。您的列的 dtype 似乎不是字符串,但它似乎也不是布尔值,因为字符串访问器 .str.upper() 丢弃了您的大部分 'False' 值,如 {{1} } 证明。

此外,由于您的系列显然包含 NaN,并且您需要计算它们没有被错误处理,因此请使用 value_counts() 来包含它们。

.value_counts(...,dropna=False)

看看如何错误地尝试在这个混合列上使用 import pandas as pd import numpy as np df = pd.Series(['True',np.nan,'FALSE','TRUE',False,True,True]) # Now note that the dtype is automatically assigned to pandas 'object'! >>> df.dtype dtype('O') >>> df.value_counts(dropna=False) True 2 NaN 2 FALSE 1 TRUE 1 True 1 False 1 False 1 dtype: int64 访问器会破坏那些实际上是 bool 的值,同时对字符串进行大小写转换:

.str.upper()
,

根据您希望此列的类型为 bool(ean) 还是 str,您可以这样做

In [1]: import pandas as pd

In [2]: df = pd.DataFrame.from_dict({'use_ab': [False] * 534167 + ['FALSE'] * 15222 + [True] * 12724 + ['TRUE'] * 1023})

# get boolean series
In [3]: df['use_ab'].astype(bool)
Out[3]:
0         False
1         False
2         False
3         False
4         False
          ...
563131     True
563132     True
563133     True
563134     True
563135     True
Name: use_ab,Length: 563136,dtype: bool

# get string series
In [4]: df['use_ab'].astype(str).str.upper()
Out[4]:
0         FALSE
1         FALSE
2         FALSE
3         FALSE
4         FALSE
          ...
563131     TRUE
563132     TRUE
563133     TRUE
563134     TRUE
563135     TRUE
Name: use_ab,dtype: object
,

您可以更改第一列中的数据类型,以便执行此类操作,假设第一列标题为“use_ab”

df['use_ab'] = df['use_ab'].astype(str)

现在那些布尔类型的值将变成字符串,现在你可以

df['use_ab'] = df['use_ab'].str.upper()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。