如何使用 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要求保留字符串内部的空格,要怎么处理?

python如何在给定的字符串中,统计某个特定子串的数量?

Python3正则匹配re.split,re.finditer及re.findall函数用法详解

Python re.split() vs nltk word_tokenize 和 sent_tokenize

Python 关于字符串处理技巧