Python 用字符串行替换数据帧头
我有一个熊猫数据框,看起来像这样:Python 用字符串行替换数据帧头,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,看起来像这样: X Y Z Value 0 6.196133e+06 2.321880e+06 1356.439 0.01 1 6.196155e+06 2.321867e+06 1347.363 0.01 2 6.196176e+06 2.321854e+06 1338.229 0.01 3
X Y Z Value
0 6.196133e+06 2.321880e+06 1356.439 0.01
1 6.196155e+06 2.321867e+06 1347.363 0.01
2 6.196176e+06 2.321854e+06 1338.229 0.01
3 6.196197e+06 2.321841e+06 1332.272 0.01
4 6.196218e+06 2.321828e+06 1326.691 0.01
如何在没有行索引的情况下将数据写入.csv(或.txt)文件,以使列以制表符(或空格)分隔,标题显示如下:
title = "dataset test"
variables = "X", "Y", "Z", "Value"
zone t = "Data Field",i = 134, j = 293, k = 5, f=point
6.196133e+06 2.321880e+06 1356.439 0.01
6.196155e+06 2.321867e+06 1347.363 0.01
6.196176e+06 2.321854e+06 1338.229 0.01
6.196197e+06 2.321841e+06 1332.272 0.01
6.196218e+06 2.321828e+06 1326.691 0.01
仅供参考:标题为Tecplot软件标题 (我没有亲自测试过,所以可能需要一些调整;-)
根据熊猫文档,类似这样的东西应该会起作用:
(我没有亲自测试过,所以可能需要一些调整;-))
根据熊猫文档,类似这样的东西应该会起作用:
准备您的输入:
import pandas as pd
import os
os.chdir('Directory to save to')
df = pd.DataFrame([[6.196133e+06,2.321880e+06,1356.439,0.01],
[6.196155e+06,2.321867e+06,1347.363,0.01],
[6.196176e+06,2.321854e+06,1338.229,0.01],
[6.196197e+06,2.321841e+06,1332.272,0.01],
[6.196218e+06,2.321828e+06,1326.691,0.01]],columns = ['X','Y','Z','Value'])
info = pd.DataFrame([['title = "dataset test"'],
['variables = ' + str(df.columns.tolist())],
['zone t = "Data Field", i = 134, j = 293, k = 5, f=point']])
要保存到Excel文件,请执行以下操作:
writer = pd.ExcelWriter('out.xlsx', engine='openpyxl')
info.to_excel(writer, sheet_name='Output', header=None, index=False, startcol=0,startrow=0)
df.to_excel(writer, sheet_name='Output', header=None, index=False, startcol=0,startrow=3)
writer.save()
要保存到CSV文件,请执行以下操作:
with open('out.csv', 'w') as myfile:
info.to_csv(myfile, header=None, index=False, sep=' ')
df.to_csv(myfile, header=None, index=False, sep=' ')
准备您的输入:
import pandas as pd
import os
os.chdir('Directory to save to')
df = pd.DataFrame([[6.196133e+06,2.321880e+06,1356.439,0.01],
[6.196155e+06,2.321867e+06,1347.363,0.01],
[6.196176e+06,2.321854e+06,1338.229,0.01],
[6.196197e+06,2.321841e+06,1332.272,0.01],
[6.196218e+06,2.321828e+06,1326.691,0.01]],columns = ['X','Y','Z','Value'])
info = pd.DataFrame([['title = "dataset test"'],
['variables = ' + str(df.columns.tolist())],
['zone t = "Data Field", i = 134, j = 293, k = 5, f=point']])
要保存到Excel文件,请执行以下操作:
writer = pd.ExcelWriter('out.xlsx', engine='openpyxl')
info.to_excel(writer, sheet_name='Output', header=None, index=False, startcol=0,startrow=0)
df.to_excel(writer, sheet_name='Output', header=None, index=False, startcol=0,startrow=3)
writer.save()
要保存到CSV文件,请执行以下操作:
with open('out.csv', 'w') as myfile:
info.to_csv(myfile, header=None, index=False, sep=' ')
df.to_csv(myfile, header=None, index=False, sep=' ')
写入行?i、j和k值来自何处?标头由用户定义。i、 j、k和字符串(如“Data Field”或“dataset test”)都是用户定义的。我可以根据其他数据预先粘贴标题行参数(i、j、k和“”中的字符串)。事实上,我只想将这三行粘贴到输出文件的顶部,然后是从dataframe.write-In行中分离出来的制表符(或空格)。I、j和k值来自何处?标头由用户定义。i、 j、k和字符串(如“Data Field”或“dataset test”)都是用户定义的。我可以根据其他数据预先粘贴标题行参数(i、j、k和“”中的字符串)。事实上,我只想将这三行粘贴到输出文件的顶部,然后从dataframe中粘贴制表符(或空格)分隔的数据。解决方案会出现以下错误:
“file”对象没有属性“writeline”
。它不会写入头,也会弄乱文件格式。感谢您的尝试。解决方案会出现以下错误:“file”对象没有属性“writeline”
。它不会写入头,也会弄乱文件格式。感谢您的尝试。除了输出是excel外,这在大多数情况下都有效。有脚本可以读取excel并将其写入csv/txt,但我的文件又大又多。此外,我担心来回会弄乱文件格式和编码,这也是我想要避免的。不过谢谢你的解决方案。我已经添加了一个保存到CSV的选项,很抱歉在你的原始问题中遗漏了这个选项。谢谢,这是我想要的方式。但是它用额外的“和[]:“title=”“dataset test”“”“变量=['X',Y',Z',Value']“zone t=”“Data Field”“,i=134,j=293,k=5,f=point“
没有问题@Bob!在指定信息数据帧时可以删除这些变量,只需使用str()将它们作为字符串传入即可这在大多数情况下都有效,但输出是excel。有脚本可以读取excel并将其写入csv/txt,但我的文件又大又多。此外,我担心来回会弄乱文件格式和编码,这也是我想要避免的。不过,感谢您提供的解决方案。我添加了一个保存到csv的选项,很抱歉错过了这个选项在你原来的问题中。谢谢,这是我想要的方式。但是它用额外的“和[]”来写标题:“title=”“dataset test”“”“变量=['X'、'Y'、'Z'、'Value']“zone t=”“Data Field”“、I=134、j=293、k=5、f=point”
没有问题@Bob!您可以在指定info DataFrame时删除它们,只需使用str()将它们作为字符串传入即可