首页 > 解决方案 > DataFrame 字符串数据操作

问题描述

我有一个 csv 文件,其中的数据如下所示,数据的排列方式类似于第一行中的 x1,y1 和第二行中的 x2,y2 以及 x1,y1 然后 x2,y2 等等。

0.0            0.0          
2.500000E-03   0.0          
5.000000E-03   0.0          
7.500000E-03   0.0          
1.000000E-02   2.721289E-05 
1.250000E-02   6.772091E-04 
1.500000E-02   3.154052E-03 
1.750000E-02   7.072636E-03 
2.000000E-02   9.175906E-03 
2.250000E-02   8.454774E-03 

并且输出应该是 x1, y1, x2, y2 格式的文本文件,并带有一些附加格式,如下所示。(开头和结尾的 astrix 以及额外的空格)

*           0.000000E+00    0.000000E+00    2.500000E-03    0.000000E+00*
*           5.000000E-03    0.000000E+00    7.500000E-03    0.000000E+00*
*           1.000000E-02    2.721289E-05    1.250000E-02    6.772091E-04*
*           1.500000E-02    3.154052E-03    1.750000E-02    7.072636E-03*
*           2.000000E-02    9.175906E-03    2.250000E-02    8.454774E-03*

我尝试使用下面的代码并获得了输出,但是零被写为 0.0 而不是指数的 8 位数字,而且我认为这可以以更简单的方式完成。如果还有其他可能的解决方案,请告诉我。

df_rfile = pd.DataFrame(r_file)
df_temp = df_rfile[0].str.split(" ", n=1, expand=True)
df_temp[1] = df_temp[1].str.strip()

df_odd = df_temp[::2]
df_odd.reset_index(inplace=True, drop=True)
df_even = df_temp[1::2]
df_even.reset_index(inplace=True, drop=True)

df_final = pd.concat([df_odd, df_even], axis=1)
dfasString = df_final.to_string(header=False, index=False)

for eachline in dfasString.splitlines():
    x = eachline.split()
    modified_str = '*'+x[0].rjust(23,' ')+x[1].rjust(16,' ')+x[2].rjust(16,' ')+x[3].rjust(16,' ')+'*'
    final_out.write(modified_str+'\n')

标签: pythonpandasstringdataframe

解决方案


import pandas as pd
import numpy as np

A = pd.read_csv(your_file.csv).to_numpy()

x1y1 = A[1::2] # select odd
x2y2 = A[::2] # select even
A = np.concatenate((x1y1, x2y2), axis=1) # concatenate

为我工作


推荐阅读