Python 如何将astropy.table.table.table文件类型转换为pandas.core.frame.DataFrame文件类型
我有10个文件,都是astropy.table.table.table文件类型,都由相同的六列组成(mjd、filter、flux、flux_error、zp、zpsys),但长度不同。 首先,我想将每个文件转换为pandas.core.frame.DataFrame文件类型,以便将它们全部添加到一个列表中,并使用pd.concat函数将所有10个文件转换为1个big pandas.core.frame.DataFrame文件。 我试过这个:Python 如何将astropy.table.table.table文件类型转换为pandas.core.frame.DataFrame文件类型,python,pandas,astropy,Python,Pandas,Astropy,我有10个文件,都是astropy.table.table.table文件类型,都由相同的六列组成(mjd、filter、flux、flux_error、zp、zpsys),但长度不同。 首先,我想将每个文件转换为pandas.core.frame.DataFrame文件类型,以便将它们全部添加到一个列表中,并使用pd.concat函数将所有10个文件转换为1个big pandas.core.frame.DataFrame文件。 我试过这个: import numpy as np import
import numpy as np
import pandas as pd
from astropy.table import Table
n=10
li=[]
for i in range(0,n):
file = "training_data/%s.dat"%i # This way I can call each file automatically
data = Table.read(file, format="ascii")
data = pd.read_table(file) # I convert the file to pandas compatible
li.append(data) # I add the file into the empty list above
# now I have my list ready so I compress it into 1 file
all_data = pd.concat(li)
这个方法的问题是由于某种原因,所有的列(6列)都被压缩成1列,这使得我无法完成剩下的工作
当我检查得到的所有_数据的形状时(879,1)。
看起来是这样的:
all_data.head()
mjd filter flux flux_error zp zpsys
0 0.0 desg -4.386 4.679 27.5 ab
1 0.011000000005878974 desr -0.5441 2.751 27.5 ab
2 0.027000000001862645 desi 0.4547 4.627 27.5 ab
3 0.043000000005122274 desz -1.047 4.462 27.5 ab
4 13.043000000005122 desg -4.239 4.366 27.5 ab
那么,我如何创建这样的文件,但将列作为单独的列进行维护呢
以下是文件0中一些我的数据的示例:
mjd filter flux flux_error zp zpsys
float64 str4 float64 float64 float64 str2
0.0 desg -4.386 4.679 27.5 ab
0.0110000 desr -0.5441 2.751 27.5 ab
0.0270000 desi 0.4547 4.627 27.5 ab
0.0430000 desz -1.047 4.462 27.5 ab
13.043000 desg -4.239 4.366 27.5 ab
13.050000 desr 4.695 3.46 27.5 ab
13.058000 desi 6.291 6.248 27.5 ab
13.074000 desz 6.412 5.953 27.5 ab
21.050000 desg 1.588 2.681 27.5 ab
21.058000 desr -0.6124 2.171 27.5 ab
可能是
Table.read()
无法猜测数据的格式/分隔符。我可以使用Table.read(file,format='ascii',data_start=2)
将包含的示例(文件0中的数据)读取到一个包含6列的表中,但我不确定是否正确捕获了空格
我怀疑文件0中的示例数据不是您正在阅读的数据,因为如果没有data\u start=2
,该文件将显示第1行为“float64 str4 float64 str2”
您可以做的一件事是尝试
Table.read(file,format='ascii',data\u start=2,guess=False)
解决方案是将sep包含在data=pd.read\u Table()中,以便将每列作为单独的列,并将sep的类型指定为“\s+”
我把你的样本放在一个文件中,用
df=pd.read_csv('test.dat',sep='\\s+',skiprows=1)读取它。
我把你的行弄乱了一点,只做了一点编辑。我刚刚将skiprows改为0 data=pd.read_csv(file,sep='\\s+',skiprows=0)非常感谢:顺便说一句,缩进在语法上对Python非常重要,在发布Python示例代码时,请确保缩进格式正确。我还是新手,正在学习,从现在起,我会记住:)我尝试过,它确实保持了我文件的形状,但第二个问题仍然存在,因为我无法将pd.concat()函数用于astropy表文件类型,除非有办法将列表转换为熊猫
n=10
li=[]
for i in range(0,n):
file = "training_data/%s.dat"%i # This way I can call each file automatically
data = pd.read_table(file, sep="\s+") # I convert the file to pandas compatible
li.append(data) # I add the file into the empty list above
# now I have my list ready so I compress it into 1 file
all_data = pd.concat(li)