如何在使用 pandas 创建列后将 "column" 添加回 txt 文件?

How to add a "column" back to txt file after creating the column with pandas?

所以我有一个 .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(没有 header 和 '~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

现在,假设我用数字 (1,2,3) 创建了一个新列数据 ['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。

谢谢!

读取文件时需要保存header,以便写回。否则就丢失了。

要写入数据框,您可以在写回 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 的字符串。