【问题标题】:how to get a column in CSV file and seperating the text and saving to other column in python [duplicate]如何在CSV文件中获取一列并将文本分隔并保存到python中的其他列[重复]
【发布时间】:2018-02-19 07:29:25
【问题描述】:

例如,我们有一个带有

的 csv 文件
name       address           age 
vip     bang #@ india     12 
ags     myso ^% india     25 
dhs     bang #@ india     14 
fgn     nyk  @$ bangla    45         

如何制作并添加到不同的列

name    city     country   age 
vip     bang    india     12 
ags     myso    india     25 
dhs     bang    india     14 
fgn     nyk     bangla    45         

我使用的代码是

import re
import csv
with open("/home/vipul/Desktop/example.csv", 'rb') as f:
    mycsv = csv.reader(f)
    for row in mycsv:
        text = row[0]
        txt = re.findall(r'(\w+[\s\w]*)\b', text)  
        print txt

【问题讨论】:

  • 用csv阅读器读取文件;拆分中间列;用 csv writer 写回文件。如果它不起作用,请发布您的代码并提出具体问题。
  • 在阅读时不考虑特殊字符,将它们视为普通字符,我使用的代码是import re import csv with open("/home/vipul/Desktop/example.csv", 'rb') as f: mycsv = csv.reader(f) for row in mycsv: text = row[0] txt = re.findall(r'(\w+[\s\w]*)\b', text) print txt
  • 请将您的代码粘贴到问题中,不要作为评论发布。

标签: python pandas csv split


【解决方案1】:

pandas 很容易:

import pandas as pd

# Create dataframe
df = pd.DataFrame({
    "name": ["vip", "ags", "dhs", "fgn"],
    "address": ["bang #@ india", "myso ^% india", "bang %@ india", "nyk @$ bangla"],
    "age": [12, 25, 14, 45]
})

# Split "address" string on spaces, keep first split
# as city, last split as country
df["city"] = df["address"].str.split(" ").str[0]
df["country"] = df["address"].str.split(" ").str[-1]

print df

结果:

         address  age name  city country
0  bang #@ india   12  vip  bang   india
1  myso ^% india   25  ags  myso   india
2  bang %@ india   14  dhs  bang   india
3  nyk @$ bangla   45  fgn   nyk  bangla

编辑:

或者,只保留某些列:

# Optionally, keep only certain columns
df = df[["name", "city", "country", "age"]]
print df

产量:

  name  city country  age
0  vip  bang   india   12
1  ags  myso   india   25
2  dhs  bang   india   14
3  fgn   nyk  bangla   45

编辑 2:

您可以使用 pandas 读取和写入文件,而不是自己创建数据框:

# Read the dataframe from file:
df = pd.read_csv("input_file.csv", sep=",")

# Split "address" string on spaces, keep first split
# as city, last split as country
df["city"] = df["address"].str.split(" ").str[0]
df["country"] = df["address"].str.split(" ").str[-1]

# Optionally, keep only certain columns
df = df[["name", "city", "country", "age"]]

# Write altered dataframe to file
df.to_csv("output_file.csv", sep=",", index=False)

编辑 3:

正如 cmets 中所指出的,拆分两次是不必要的;你可以这样做:

split = df["address"].str.split(" ")
df["city"] = split.str[0]
df["country"] = split.str[-1]

【讨论】:

  • 先生,这是 CSV 文件,我需要导入然后写入它!!
  • 您可以使用 pandas 读取 csv 文件而不是手动写入数据帧:df = pd.read_csv("input_file.csv"),然后像上面一样进行字符串拆分,然后再次将其写入文件:df.to_csv("output_file", sep=",", index=False)
  • 不要分两次!预先做一次并参考结果。 df["address"].str.split(" ")
  • @piRSquared 谢谢,好点子,我会添加一个编辑。
  • 如果他们中的一些人有 3 件事要拆分 banglore @# karnataka @#$ india
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2012-10-27
  • 2017-10-19
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多