如何在使用 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 的字符串。
所以我有一个 .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 的字符串。