python - 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')
解决方案
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
为我工作
推荐阅读
- c# - 将控件的样式绑定到 Viewmodel 属性
- tensorflow - Tensorflow 2 自定义损失返回 nan
- javascript - 超出 ResizeObserver 循环限制 - 停止异常
- java - 在 Java REST API 中从 SFTP 服务器返回损坏的文件
- javascript - 将 Javascript 翻译成 Google Appscript
- ruby-on-rails - Rails:收藏系统 - 模型关联
- java - 如何将 POJO 类的对象映射到 Posgres 的 json 类型
- vba - 使用 Excel VBA 脚本遍历 Lotus Notes 中的所有视图
- python - 分别组合(合并)列表中的多个字典
- c - 调整哈希表大小并保留旧表中的元素