我正在处理一个大型 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 无法处理。
(' ')
(':')
Seatblocks
text-to-columns
最终,我想采用约翰列侬之类的唱片并创建多条线路,将每组座位的信息放在单独的线路上。
要处理 CSV 文件中的 Seatblocks 列,并根据空格和冒号拆分文本,然后将每组座位信息拆分成单独的行,你可以使用 pandas 库来实现。下面是一个详细的解决方案,分步解释如何完成这个任务:
首先,使用 pandas 读取 CSV 文件到一个 DataFrame。
定义一个函数来拆分 Seatblocks 列中的数据。你可以首先根据空格拆分每个字符串,然后进一步根据冒号拆分每个部分。
将拆分后的数据转换为多个行。
以下是完成这些任务的代码示例:
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)
pd.read_csv('your_file.csv') 用于加载 CSV 文件。
pd.read_csv('your_file.csv')
定义处理函数:
process_seatblocks 函数先用空格拆分字符串,然后用冒号拆分每个部分。返回一个包含拆分数据的列表。
process_seatblocks
应用处理函数:
使用 df['Seatblocks'].apply(process_seatblocks) 来处理 Seatblocks 列中的数据,将结果保存在新列 SeatblocksProcessed 中。
df['Seatblocks'].apply(process_seatblocks)
SeatblocksProcessed
将列表拆分成行:
df.explode('SeatblocksProcessed') 将包含列表的列展开为多个行,每行包含列表中的一个元素。
df.explode('SeatblocksProcessed')
将拆分出的数据转成新的列:
使用 apply(pd.Series) 将列表转换为 DataFrame 的新列。
apply(pd.Series)
合并数据:
使用 pd.concat 将处理后的 DataFrame 与原 DataFrame 合并,生成最终结果。
pd.concat
保存结果:
df_final.to_csv('processed_file.csv', index=False)
这个方法会将每个 Seatblocks 记录拆分为多个行,并将拆分后的数据放入新的列中,适用于处理大型数据集。