如何使用 re.split 在 python 中拆分两列从 CSV 中查找字符串值
Posted
技术标签:
【中文标题】如何使用 re.split 在 python 中拆分两列从 CSV 中查找字符串值【英文标题】:how to split two columns finding a string value from a CSV in python using re.split 【发布时间】:2020-07-18 02:37:24 【问题描述】:我试图查看其他示例和问题,但无法弄清楚我做错了什么。
我正在尝试在单元格中找到常用词“for”或“fits”,然后将之后的所有内容拆分为单独的列。
数据示例:
Col 1 Col 2 Col 3
Add Carpart for Make Model Variation 1 2 3 1000
Add Carpart for Make Model Variation 111 1000
Add Carpart for Make Model Variation 1000
Add Carpart fits Make Model Variation 1000
我想要达到的目标:
Col 1 Col 2 Col 3 Col 4 Col 5 Col 6
Add Carpart for Make Model Variation 1 2 3 1000
Add Carpart for Make Model Variation 1 1 1 1000
Add Carpart for Make Model Variation 1000
Add Carpart fits Make Model Variation 1000
据我所知,但我不断收到 int object is not subscriptable 的错误。
import csv
import re
import pandas as pd
rowCounter = 0
fileinString = 'input.csv'
fileoutString = 'output/output.csv'
with open(fileinString, "r", newline="") as inFile, open(fileoutString, "w", newline="") as outFile:
reader = csv.reader(inFile)
readerdf = pd.DataFrame(reader)
writer = csv.writer(outFile)
for row in readerdf:
row[2].str.split(pat='.*for', expand=True)
writer.writerow(row)
rowCounter += 1
screenOutput = "COMPLETED ROW: ".format(rowCounter)
print(screenOutput)
else:
print("FINISHED")
【问题讨论】:
你的代码输出了什么? 你不能像使用 df.iloc 那样迭代数据帧 要迭代数据框的行,请使用for row in df.iterrows()
第 5 列的数字,它们也分开了吗?
【参考方案1】:
如果您的数据与您展示的示例一样,您可以将第二列拆分为前 4 个空格并根据需要连接数据框。
import pandas as pd
import re
fileinString = 'input.csv'
fileoutString = 'output.csv'
df = pd.read_csv(fileinString)
print(df)
# split the first 4 spaces
df1 = df["Col 2"].str.split(pat="\s", n=4, expand=True)
# if you don't need the for|fits comment this line
df1[0] = df1[[0, 1]].astype(str).apply(' '.join, axis=1)
df1 = df1.drop(columns=[1])
df = pd.concat([df.iloc[:,0], df1, df.iloc[:,-1]], axis=1)
# readjust column names
df.columns = ["Col ".format(i+1) for i in range(df.shape[1])]
print(df)
df.to_csv(fileoutString, index=False)
df的输出
Col 1 Col 2 Col 3 Col 4 Col 5 Col 6
0 Add Carpart for Make Model Variation 1 2 3 1000
1 Add Carpart for Make Model Variation 111 1000
2 Add Carpart for Make Model Variation 1000
3 Add Carpart fits Make Model Variation 1000
【讨论】:
以上是关于如何使用 re.split 在 python 中拆分两列从 CSV 中查找字符串值的主要内容,如果未能解决你的问题,请参考以下文章
区别 |Python str.split()和re.split()
python re.split要求保留字符串内部的空格,要怎么处理?
Python3正则匹配re.split,re.finditer及re.findall函数用法详解