为什么数据帧循环不适用于列



我有一个名为df_tag的数据帧。为了预处理数据,我在for循环中逐列遍历数据帧。在另一种情况下,我有一个String列,它首先将字符串转换为小写(#lower(,然后使用regex(#标点符号(应用lambda函数。问题是在for循环中,标点符号部分不起作用:

for col in df_tag.columns:
if df_tag[col].dtypes == "int64":
new_data[col]=df_tag[col]
else:
#lower
new_data[col] = df_tag[col].str.lower()        
#punctuation
new_data[col] = df_tag[col].apply(lambda x : " ".join(re.findall('[w]+',x)))

但当我应用标点符号部分而不使用for循环时,效果很好。下面是一个例子,我将其应用于显式调用的列"名称":

new_data['Name'] = df_tag['Name'].apply(lambda x : " ".join(re.findall('[w]+',x)))

有人能给我一个用列循环的好方法吗。

在for循环解决方案中,您将用new_data[col]中的标点符号部分替换下部

将给你一个如何让你的代码工作的例子:

import pandas as pd
import re
data = {'Col1':list(range(1,5)),'Col2': list(range(6,10)),'Col3': ['a=b~c','B-C-D','c?d?e','D.E,F'] }
df_tag = pd.DataFrame(data, columns=data.keys())
print(df_tag)
#   Col1  Col2   Col3
#0     1     6  a=b~c
#1     2     7  B-C-D
#2     3     8  c?d?e
#3     4     9  D.E,F
new_data = pd.DataFrame().reindex_like(df_tag)
for col in df_tag.columns:
if df_tag[col].dtypes == "int64":
new_data[col]=df_tag[col]
else:
#lower & punctuation
new_data[col] = df_tag[col].str.lower().apply(lambda x : " ".join(re.findall('[w]+',x)))

结果的打印将看起来像这个

print(new_data)
#   Col1  Col2   Col3
#0     1     6  a b c
#1     2     7  b c d
#2     3     8  c d e
#3     4     9  d e f  

相关内容

  • 没有找到相关文章

最新更新