【问题标题】:Splitting a value in a row to multiple column将一行中的值拆分为多列
【发布时间】:2020-08-04 19:18:08
【问题描述】:

我有一个 csv 文件,其第一列包含曲目名称和艺术家姓名以及其他信息。我想将第一列值拆分为 2 个不同的列。 csv 文件的示例如下。

artist_trackname,year,month,day,hour,minute
'Sonic Species & Volcano - What Is Life\n',2020,8,5,0,25

我想要实现的是:

artist,trackname,year,month,day,hour,minute
'Sonic Species & Volcano, What Is Life\n',2020,8,5,0,25

有人可以帮我在 python 中完成这项工作吗?

【问题讨论】:

  • 这两个值总是用连字符隔开吗?
  • 您是否使用csv module 处理文件?

标签: python csv


【解决方案1】:

您似乎想要一个仅基于艺术家曲目名称的“-”部分的附加列。

这可以在 Pandas 中轻松完成

import pandas as pd

加载您的 csv:

df = pd.read_csv(r"./filename.csv")

df.head()


artist_trackname    year    month   day hour    minute
0   'Sonic Species & Volcano - What Is Life\n'  2020    8   5   0   25

将项目拆分为' - '之外的两列:

df[['artist','trackname']] = df['artist_trackname'].str.split(" - ", n = 1, expand = True)

删除旧列:

df.drop(columns=["artist_trackname"], inplace=True)

将列重新排序为您想要的格式:

df[['artist','trackname','year','month','day','hour','minute']]

df.head()

    artist  trackname   year    month   day hour    minute
0   'Sonic Species & Volcano    What Is Life\n' 2020    8   5   0   25

写回csv:

df.to_csv(r"/path/to/filename.csv")

【讨论】:

  • 这个帮助了我。谢谢!
【解决方案2】:

如果这些字段总是用连字符分隔,您可以使用 python 终端读取文件,将“-”替换为“,”即可。这是一个假设您的 CSV 文件名为 test.csv 的示例:

>>> with open('test.csv', 'r') as f:
...     lines = f.readlines()
... 
>>> lines
['artist_trackname,year,month,day,hour,minute\n', "'Sonic Species & Volcano - What Is Life\\n',2020,8,5,0,25\n"]
>>> write_lines = [line.replace(" - ", ",") for line in lines]
>>> with open('test.csv', 'w') as f:
...     f.writelines(write_lines)
... 

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2023-04-01
    • 2017-11-08
    • 2012-06-16
    相关资源
    最近更新 更多