我有一个如下所示的 Dataframe :
# Create an example dataframe about a fictional army
raw_data = {'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks'],
'company': ['1st', '1st', '2nd', '2nd'],
'deaths': ['kkk', 52, '25', 616],
'battles': [5, '42', 2, 2],
'size': ['l', 'll', 'l', 'm']}
df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'deaths', 'battles', 'size'])
我的目标是将 Dataframe 中的每个字符串都转换为大写,这样看起来就像这样:
注意:所有数据类型都是对象,不能更改;输出必须包含所有对象。2我想避免一个接一个地转换每一列......我想尽可能地在整个 Dataframe 上做这件事。
到目前为止,我尝试过这样做,但没有成功
df.str.upper()
8条答案
按热度按时间wsewodh21#
astype()会将每个序列转换为dtype对象(string),然后对转换后的序列调用str()方法以获得字符串,并对其调用函数upper()。注意,在此之后,所有列的dtype都将更改为object。
稍后可以使用to_numeric()将'battles'列再次转换为数值:
lsmd5eda2#
这可以通过以下
applymap
方法解决:ycggw6v23#
循环是非常慢的,而不是使用apply函数到每一个和一行中的单元格,尝试获得一个列表中的列名,然后循环列的列表,将每一列的文本转换为小写。
下面的代码是向量操作,比apply函数快。
irtuqstp4#
由于
str
仅适用于序列,因此您可以将其单独应用于每列,然后连接:编辑:性能比较
两种答案在小 Dataframe 上表现相同。
型
在一个大的 Dataframe 上,我的答案稍微快一些。
vvppvyoh5#
试试这个
wswtfjt76#
如果要保留dtype,请使用
isinstance(obj,type)
dsekswqp7#
如果要保留数据类型或仅更改一种类型,请尝试,如果:
ogq8wdun8#
你可以把它应用于每一个cols...
oh_df.列=Map(字符串下限,oh_df.列)