Как добавить список в фрейм данных? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь построчно прочитать файл ASCII в кадре данных Pandas.

Я написал следующий скрипт:

import pandas as pd

col_labels = ['Sg', 'Krg', 'Krw', 'Pc']

df = pd.DataFrame(columns=col_labels)

f = open('EPS.INC', 'r')
for line in f:
    if 'SGWFN' in line:
        print('Reading relative permeability table')
        for line in f:
            line = line.strip()
            if (line.split() and not line.startswith('/') and not line.startswith('--')):
                cols = line.split()
                print(repr(cols))
                df=df.append(cols)

print('Resulting Dataframe')
print(df)

Файл, который я анализирую, выглядит примерно так:

SGWFN            

--Facies 1 Drainage SATNUM 1            
--Sg    Krg    Krw    J
0.000000    0.000000    1.000000    0.000000
0.030000    0.000000    0.500000    0.091233
0.040000    0.000518    0.484212    0.093203
0.050000    0.001624    0.468759    0.095237
/

Я надеялся добавить четыре значения в каждую строку данных. Вместо этого они добавляются в виде столбцов, что-то вроде этого:

Resulting Dataframe
      Sg  Krg  Krw   Pc           0
0    NaN  NaN  NaN  NaN    0.000000
1    NaN  NaN  NaN  NaN    0.000000
2    NaN  NaN  NaN  NaN    1.000000
3    NaN  NaN  NaN  NaN    0.000000
4    NaN  NaN  NaN  NaN    0.030000
5    NaN  NaN  NaN  NaN    0.000000
6    NaN  NaN  NaN  NaN    0.500000

Может кто-нибудь объяснить мне, что я делаю не так?

Спасибо! D

1 Ответ

0 голосов
/ 15 апреля 2019

Я предлагаю создать пустой список L и добавить значения в цикле, последний вызов конструктора DataFrame:

L = []
#better for correct close file
with open("EPS.INC") as f:
    for line in f:
        if 'SGWFN' in line:
            print('Reading relative permeability table')
            for line in f:
                line = line.strip()
                if (line.split() and not line.startswith('/') and not line.startswith('--')):
                    cols = line.split()
                    print(repr(cols))
                    L.append(cols)

print('Resulting Dataframe')
col_labels = ['Sg', 'Krg', 'Krw', 'Pc']

df = pd.DataFrame(L, columns=col_labels)
print(df)
         Sg       Krg       Krw        Pc
0  0.000000  0.000000  1.000000  0.000000
1  0.030000  0.000000  0.500000  0.091233
2  0.040000  0.000518  0.484212  0.093203
3  0.050000  0.001624  0.468759  0.095237

Ваше решение должно быть изменено добавлением Series с указанным индексом:

col_labels = ['Sg', 'Krg', 'Krw', 'Pc']

df = pd.DataFrame()
f = open('EPS.INC', 'r')
for line in f:
    if 'SGWFN' in line:
        print('Reading relative permeability table')
        for line in f:
            line = line.strip()
            if (line.split() and not line.startswith('/') and not line.startswith('--')):
                cols = line.split()
                print(repr(cols))
                df=df.append(pd.Series(cols, index=col_labels), ignore_index=True)

print('Resulting Dataframe')
print(df)
        Krg       Krw        Pc        Sg
0  0.000000  1.000000  0.000000  0.000000
1  0.000000  0.500000  0.091233  0.030000
2  0.000518  0.484212  0.093203  0.040000
3  0.001624  0.468759  0.095237  0.050000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...