如何将含XY坐标的单列DataFrame按每两个值拆分为X、Y两列?
解决单列XY交替数据拆分问题
场景说明
你的CSV文件每行存储一个坐标值,按X、Y、X、Y...的顺序排列,用pandas读取后得到仅含一列的DataFrame,需要将其拆分为X和Y两列。
具体实现
1. 读取CSV文件
由于文件无分隔符,每行一个值,读取时需指定无表头:
import pandas as pd # 读取文件,命名临时列名为temp df = pd.read_csv('coords.csv', header=None, names=['temp'])
2. 拆分数据为X、Y列
提供两种简洁的实现方式:
方式一:利用索引切片(直观易懂)
通过选取偶数索引行作为X,奇数索引行作为Y:
# 提取X列:0、2、4...位置的行,重置索引避免错位 X_col = df.iloc[::2, 0].reset_index(drop=True) # 提取Y列:1、3、5...位置的行,重置索引 Y_col = df.iloc[1::2, 0].reset_index(drop=True) # 合并为目标DataFrame result_df = pd.DataFrame({'X': X_col, 'Y': Y_col})
方式二:利用numpy重塑数组(更高效)
将单列数据直接重塑为每行两个元素的二维数组,同时兼容奇数行数据的情况:
import numpy as np # 检查数据行数是否为偶数,避免报错 if len(df) % 2 != 0: print("警告:数据行数为奇数,最后一个坐标值将被忽略") # 取前偶数个值重塑 coords_array = df['temp'].values[:-1].reshape(-1, 2) else: coords_array = df['temp'].values.reshape(-1, 2) # 转成目标DataFrame result_df = pd.DataFrame(coords_array, columns=['X', 'Y'])
3. 验证结果
执行后result_df的格式即为你需要的:
X Y 0 792.0 610.0 1 786.0 602.0 2 ... ...
内容的提问来源于stack exchange,提问作者Antonego64
相关产品推荐
相关产品推荐

