python - 使用熊猫创建列后如何将“列”添加回txt文件?
问题描述
所以我有一个 .LAS 文件(它实际上作为 txt 文件工作)并将其转换为数据框。后来我创建了一个新列,其中包含有关数据框的一些重要信息。有没有办法像原来的一样重写 LAS 文件,但现在使用新列?
这是我的 LAS 文件的样子:
Text 1
Text 2
Text 3
Text 4
~A Stats1 Stats2 Stats3
1 2 3
6 6 7
8 9 3
所以我设法以我想要的方式将文件转换为 DataFrame(没有标题和'~A'):
with open(r'C:...filename.las') as f:
for l in f:
if l.startswith('~A'):
stats= l.split()[1:]
break
data = pd.read_csv(f, names=stats, sep='~A', engine='python')
data
Stats1 Stats2 Stats3 Numbers
1 2 3 1
6 6 7 2
8 9 3 3
现在,假设我使用 numbers(1,2,3) 创建了一个新列 data['Numbers'],如果我设法将其重写回我的 LAS 文件,它应该是:
```
Text 1
Text 2
Text 3
Text 4
~A Stats1 Stats2 Stats3 Numbers
1 2 3 1
6 6 7 2
8 9 3 3
```
任何人都知道我该怎么做?
如果我只是使用:
np.savetxt('filename_edited.las', data, fmt="%s")
...我设法用我想要的数据获取新的 LAS 文件,但没有原始文件上的标题。
谢谢!
解决方案
读取文件的时候需要保存header,这样就可以回写了。否则就丢了。
要编写数据帧,您可以在写回标题文本后使用pandas.DataFrame.to_csv 。
with open('data.txt') as f:
file_header = []
for l in f:
if l.startswith('~A'):
stats= l.split()[1:]
break
else:
file_header.append(l)
data = pd.read_csv(f, names=stats, sep='\s+', engine='python')
#manipulate the dataframe to add a column or whatever
data['numbers'] = [1, 2, 3]
with open('data2.txt', 'w') as wf:
data_str = data.to_csv(None)
for l in file_header:
wf.write(l)
wf.write('~A')
wf.write(data_str)
data2.txt看起来像:
Text 1
Text 2
Text 3
Text 4
~A,Stats1,Stats2,Stats3,numbers
0,1,2,3,1
1,6,6,7,2
2,8,9,3,3
to_csv
默认情况下使用逗号分隔符,但您可以使用sep
参数指定不同的分隔符。必须是长度为 1 的字符串。
推荐阅读
- python - 如果来自另一个数据框的列和来自原始数据框的列具有匹配值,则在原始数据框中创建一个新列
- python - 随着数据帧大小的增加,dask 性能下降
- android - 弗里达问题。挂钩静态方法调用
- c++ - C++ midfunction hook 覆盖原来的局部变量
- javascript - 将数组上传到 Firestore
- node.js - 在邮递员中使用表单数据使 req.body 为空
- spring-boot - 如何为 Spring Boot 控制器返回的生成的 Asciidoc HTML 添加样式?
- java - 从redis中获取n个key
- javascript - 云功能仅检索数据库中的第一项,而不是全部
- html - eXide 的比萨饼