以下csv由列表组成。但是,第(2)position_start
和第(3)position_end
列的列表格式不正确(即没有单独的逗号)。
我想将csv读入一个四列的熊猫DataFrame。
我尝试了以下代码,但没有成功。
position=pd.read_csv(filename, delimiter='\t',index_col=0)
CSV文件:
,position_c,position_r_theta_phi,position_start,position_end
0,"[14.533842862081656, 0.03208616222764249, 56.92541191588316]","[58.751477765706575, 0.2499741778590546, 0.00220768246933476]",[ 19271.0805564 17808.46240249 18693.4114863 ],[ 19270.18114729 18215.86140969 18693.4114863 ]
1,"[15.565867354362126, 2.2766677669751516, 82.666319295054564]","[84.149865052813752, 0.1880523977235686, 0.1452305063941714]",[ 19301.1424449 17812.85092455 18719.15239368],[ 19242.18330777 18215.96205085 18719.15239368]
2,"[-5.4087970793661952, 8.7687766840863333, 82.903514489531517]","[83.541242779224319, 0.12364001055133951, 2.1234950828837396]",[ 19424.05948468 18127.83826079 18719.38958887],[ 19077.31693912 17913.95893244 18719.38958887]
3,"[5.4876143325782323, -5.6088702278284472, 22.368059246608027]","[23.704501909037916, 0.3373934168579211, 5.4868601633848755]",[ 19115.9817056 17864.06576253 18658.85413363],[ 19407.18754103 18148.97613687 18658.85413363]
谢谢
费
答案 0 :(得分:0)
Notebook: 2018-09-30_columns_mix_format_lists.ipynb
进口:
import pandas as pd
import re
df = pd.read_csv('Book1.csv', index_col=0)
输出:
每个单元格都是csv中列表形式的字符串,并且position_start
和position_end
不是逗号分隔。
修复列表:
def list_fix(row):
new_list = []
for x in row:
new_list.append(re.findall(r"[-+]?\d*\.\d+|\d+", x))
return new_list
df_processed = df.apply(lambda row: list_fix(row))
问题中要求的输出:
每个单元格现在都用逗号分隔。
如果您想要一个每个单元格都是一个单独值的DataFrame:
解压缩列表:
pos_c = df_processed.position_c.apply(pd.Series)
pos_c = pos_c.rename(columns=lambda x: f'position_c_{x}')
pos_rtp = df_processed.position_r_theta_phi.apply(pd.Series)
pos_rtp = pos_rtp.rename(columns=lambda x: f'position_r_theta_phi_{x}')
pos_s = df_processed.position_start.apply(pd.Series)
pos_s = pos_s.rename(columns=lambda x: f'position_start_{x}')
pos_e = df_processed.position_end.apply(pd.Series)
pos_e = pos_e.rename(columns=lambda x: f'position_end_{x}')
最终数据框:
df_final = pd.concat([pos_c, pos_rtp, pos_s, pos_e], axis=1)
将所有值设置为浮点数:
df_final = df_final.astype('float64')
最终输出:
所有值现已解压到单个单元格中。
请记住在选中的解决方案旁边打勾。