как преобразовать тип файла astropy.table.table.Table в тип файла pandas.core.frame.DataFrame - PullRequest
0 голосов
/ 16 октября 2019

У меня есть 10 файлов всех типов файлов astropy.table.table.Table, все они состоят из одних и тех же шести столбцов (mjd, filter, flux, flux_error, zp, zpsys), но имеют разную длину. во-первых, я хочу преобразовать каждый файл в тип файла pandas.core.frame.DataFrame, чтобы я мог добавить их все в один список и использовать функцию pd.concat, чтобы превратить все 10 файлов в 1 большой файл pandas.core.frame.DataFrame. файл. Я пробовал это:

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

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Возможно, Table.read() не сможет угадать формат / разделитель ваших данных. Я могу прочитать включенный пример (данные в файле 0), используя Table.read(file, format='ascii', data_start=2), в таблицу из 6 столбцов, но я не уверен, что пробелы правильно фиксируются.

Я подозреваю, что данные примера в файле 0 не являются буквально тем, что вы читаете, потому что без data_start=2 этот файл будет отображаться со строкой 1 как "float64 str4 float64 float64 float64 str2".

Одна вещь, которую вы можете сделать, это попробовать Table.read(file, format='ascii', data_start=2, guess=False).

0 голосов
/ 17 октября 2019

решение было включить sep в data = pd.read_table (), чтобы каждый столбец оставался отдельным столбцом с указанием типа sep как "\ s +"

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...