小能豆

如何将一列中的文本拆分为多行

javascript

我正在处理一个大型 csv 文件,倒数第二列有一串文本,我想用特定分隔符将其拆分。我想知道是否有一种使用 pandas 或 python 的简单方法可以做到这一点?

CustNum  CustomerName     ItemQty  Item   Seatblocks                 ItemExt
32363    McCartney, Paul      3     F04    2:218:10:4,6                   60
31316    Lennon, John        25     F01    1:13:36:1,12 1:13:37:1,13     300

我想用空格(' ')和冒号拆分列(':')Seatblocks但每个单元格会产生不同的列数。我有一个函数可以重新排列列,以便Seatblocks列位于工作表的末尾,但我不知道接下来该怎么做。我可以使用内置text-to-columns函数和快速宏在 Excel 中完成此操作,但我的数据集有太多记录,Excel 无法处理。

最终,我想采用约翰列侬之类的唱片并创建多条线路,将每组座位的信息放在单独的线路上。


阅读 56

收藏
2024-07-26

共1个答案

小能豆

要处理 CSV 文件中的 Seatblocks 列,并根据空格和冒号拆分文本,然后将每组座位信息拆分成单独的行,你可以使用 pandas 库来实现。下面是一个详细的解决方案,分步解释如何完成这个任务:

1. 加载 CSV 文件

首先,使用 pandas 读取 CSV 文件到一个 DataFrame。

2. 处理 Seatblocks

定义一个函数来拆分 Seatblocks 列中的数据。你可以首先根据空格拆分每个字符串,然后进一步根据冒号拆分每个部分。

3. 将处理后的数据拆分为单独的行

将拆分后的数据转换为多个行。

4. 保存处理后的数据到新的 CSV 文件

以下是完成这些任务的代码示例:

import pandas as pd

# 1. 加载 CSV 文件
df = pd.read_csv('your_file.csv')

# 2. 定义处理函数
def process_seatblocks(seatblocks):
    # 先用空格拆分
    blocks = seatblocks.split(' ')
    results = []
    for block in blocks:
        # 用冒号拆分每个部分
        parts = block.split(':')
        results.append(parts)
    return results

# 3. 应用处理函数
df['SeatblocksProcessed'] = df['Seatblocks'].apply(process_seatblocks)

# 4. 将列表拆分成单独的行
df_exploded = df.explode('SeatblocksProcessed')

# 5. 将拆分出的数据转成新的列
seatblocks_df = df_exploded['SeatblocksProcessed'].apply(pd.Series)

# 6. 将处理后的数据与原 DataFrame 合并
df_final = pd.concat([df_exploded.drop(columns=['SeatblocksProcessed']), seatblocks_df], axis=1)

# 7. 将最终结果保存到新的 CSV 文件
df_final.to_csv('processed_file.csv', index=False)

详细解释

  1. 加载数据:
  2. pd.read_csv('your_file.csv') 用于加载 CSV 文件。

  3. 定义处理函数:

  4. process_seatblocks 函数先用空格拆分字符串,然后用冒号拆分每个部分。返回一个包含拆分数据的列表。

  5. 应用处理函数:

  6. 使用 df['Seatblocks'].apply(process_seatblocks) 来处理 Seatblocks 列中的数据,将结果保存在新列 SeatblocksProcessed 中。

  7. 将列表拆分成行:

  8. df.explode('SeatblocksProcessed') 将包含列表的列展开为多个行,每行包含列表中的一个元素。

  9. 将拆分出的数据转成新的列:

  10. 使用 apply(pd.Series) 将列表转换为 DataFrame 的新列。

  11. 合并数据:

  12. 使用 pd.concat 将处理后的 DataFrame 与原 DataFrame 合并,生成最终结果。

  13. 保存结果:

  14. 使用 df_final.to_csv('processed_file.csv', index=False) 将处理后的数据保存到新的 CSV 文件。

这个方法会将每个 Seatblocks 记录拆分为多个行,并将拆分后的数据放入新的列中,适用于处理大型数据集。

2024-07-26