以下是我的输入csv文件:
column1 column2
abc city town efg town
abc town city efg city
efg town abc city town
efg city abc town city
如果我的csv文件包含以下内容,我希望这样做:
1)城市只有在一行中存在时才应删除城市
2)镇只有在一行中存在时才会删除镇
3)城市镇如果存在,它应该只删除城镇
4)镇城市如果存在,应该只删除城市
我想要的输出应该如下所示:
column1 column2
abc city efg
abc town efg
efg abc city
efg abc town
我正在尝试使用Python来实现。这是我到目前为止尝试过的:
import pandas as pd
df = {"A": ['abc town', "abc city", 'abc town city', "abc city town"]}
for i in df['A']:
... if i == 'town':
... df['b'] == 'yes'
... print (df)
如果行只包含城市或城镇,我就会被卡住,我必须删除它。我知道有一个概念包含了所有的,我可以在申请时使用它,但我不确定。
发布于 2018-07-03 10:32:05
这是我尝试过的简单的解决方案,
df['column1'] = df['column1'].str.replace(r'town$','')
df['column1'] = df['column1'].str.replace(r'city$','')
对于column2也是如此
df['column2'] = df['column2'].str.replace(r'town$','')
df['column2'] = df['column2'].str.replace(r'city$','')
输出将如下所示,
column1 column2
abc city efg
abc town efg
efg abc city
efg abc town
发布于 2018-07-03 03:11:06
这不使用Pandas模块。但我相信它能做你想要的。不过,完成这项任务的方法可能要短得多。
import csv
filename = 'file location and name'
with open(filename, 'r') as f:
reader = csv.reader(f)
data = list(reader)
list1 = []
for x in data:
for i in x:
if i.count(' ') > 1:
i = ' '.join(i.split(' ', 2)[:2])
list1.append(i)
else:
i = i.split(' ')[0]
list1.append(i)
list2 = list1[::2]
list3 = list1[1::2]
zipped_list = zip(list2,list3)
headers = ['header1', 'header2']
with open("output.csv","w",newline="") as csv_save:
cw = csv.writer(csv_save)
cw.writerow(headers)
cw.writerows(zipped_list)
https://stackoverflow.com/questions/51141436
复制相似问题