识别dataframe中的字符串并使用Python替换内容
我有一个csv文件,我用熊猫加载。首先,我决定重命名这些列。数据帧如下所示: 我的目标是检查每行的所有列是否包含以下字符识别dataframe中的字符串并使用Python替换内容,python,pandas,dataframe,replace,identity,Python,Pandas,Dataframe,Replace,Identity,我有一个csv文件,我用熊猫加载。首先,我决定重命名这些列。数据帧如下所示: 我的目标是检查每行的所有列是否包含以下字符\n。如果是这样,则必须修改包含前面提到的字符串的行的单元格,以便只剩下\n之后的内容。该算法的输出应如下所示: 到目前为止,代码是这样的,但我一直在查找和删除\n以及之前的内容 import pandas as pd df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None,low_memory=Fals
\n
。如果是这样,则必须修改包含前面提到的字符串的行的单元格,以便只剩下\n
之后的内容。该算法的输出应如下所示:
到目前为止,代码是这样的,但我一直在查找和删除\n以及之前的内容
import pandas as pd
df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None,low_memory=False)
df.columns = ['A','B','C','D','E','F']
for index, row in df.iterrows():
if '\n' in row[?]:
# how do I remove the unwanted characters for each cell?
注意:我想调查所有列,而不仅仅是那些出现\n
的列
A object
B object
C object
D object
E int64
F object
dtype: object
IIUC,您可以使用
applymap
和str.split
在\n
字符上进行拆分,并进行最后一次拆分:
df['E'] = df['E'].astype(str)
df.applymap(lambda x: x.split('\n')[-1])
一艘班轮:
df.applymap(lambda x: x.split('\n')[-1] if type(x)==str else x)
IIUC,您可以使用
applymap
和str.split
在\n
字符上进行拆分,并进行最后一次拆分:
df['E'] = df['E'].astype(str)
df.applymap(lambda x: x.split('\n')[-1])
一艘班轮:
df.applymap(lambda x: x.split('\n')[-1] if type(x)==str else x)
可以使用正则表达式从字符串中删除“\n”(或指定的任何其他字符)之前的任何内容:
import re
str="onetwo\nthree"
print(str)
test = re.search('(?<=\\n)\w+', str)
print(test.group(0))
重新导入
str=“onetwo\nthree”
打印(str)
test=re.search(“(?您可以使用正则表达式从字符串中删除“\n”(或您指定的任何其他字符)之前的任何内容:
import re
str="onetwo\nthree"
print(str)
test = re.search('(?<=\\n)\w+', str)
print(test.group(0))
重新导入
str=“onetwo\nthree”
打印(str)
测试=重新搜索('(?解决方案
使用str
存取器,在stack
之后使用split
,以获取序列
df.astype(str).stack().str.split('\n').str[-1].unstack()
设置参考
解决方案
使用str
存取器,在stack
之后使用split
,以获取序列
df.astype(str).stack().str.split('\n').str[-1].unstack()
设置参考
请不要发布图像以共享数据。请粘贴数据并将其格式化为代码。为什么所有这些否决票…我的问题非常合法请不要发布图像以共享数据。请粘贴数据并将其格式化为代码。为什么所有这些否决票…我的问题非常合法!当我尝试您的解决方案时,出现以下错误:(“'numpy.int64'对象没有属性'split'”,'发生在索引E')怎么可能?您需要将所有列作为string
对象才能工作。请检查dtypes
,并使用astype(str
)将这些整数列转换为str
)。我按照您提到的方式进行了转换,不再收到任何错误消息,但什么也没有发生……数据帧保持原样……怎么可能?在Python3.5
,Pandas0.18.1
中对我来说运行良好。我有:Python 3.5.1(v3.5.1:37a07cee5969,2015年12月6日,01:54:25)[MSC v.1900 64位(AMD64)-Pandas'0.18.0'Hi!当我尝试您的解决方案时,我得到了以下错误:(“'numpy.int64'对象没有属性'split',发生在索引E')这怎么可能?您需要将所有列作为string
对象才能工作。检查dtypes
并使用astype将这些整数列转换为str
(str
)。我按照您提到的方式进行了转换,不再收到任何错误消息,但什么也没有发生……数据帧一直保持原样……怎么可能?在Python3.5
、Pandas0.18.1
中,它对我来说工作得很好。我有:Python 3.5.1(v3.5.1:37a07cee5969,2015年12月6日,01:54:25)[MSC v.1900 64位(AMD64)]-Pandas'0.18.0'