Замена строки массивом numpy в кадре данных pandas - PullRequest
1 голос
/ 08 апреля 2020

У меня есть CSV-файл, который выглядит следующим образом:

A, B
34, "1.0, 2.0"
24, "3.0, 4.0"

Я читаю файл, используя pandas:

import pandas as pd
df = pd.read_csv('file.csv')

Что мне нужно сделать, это заменить строки по numpy массивам:

for index, row in df.iterrows():
        df['B'][index] = np.fromstring(df['B'][index], sep=',')

Однако возникает ошибка A value is trying to be set on a copy of a slice from a DataFrame. Однако массивы numpy создаются правильно.

Мне нужно, чтобы все значения в B имели тип numpy.ndarray.

Редактировать: я пытался заменить df на строку в коде.

for index, row in df.iterrows():
    row['flux'] = np.fromstring(row['flux'][index][1:-1], sep=',')

И никакой ошибки не возникает, но тип переменных не меняется, а DataFrame по-прежнему содержит строки.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Используйте параметр converters в read_csv для преобразования в numpy массив:

import pandas as pd
import numpy as np
from io import StringIO

temp='''A,B
34,"1.0, 2.0"
24,"3.0, 4.0"'''
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), converters={'B':lambda x: np.fromstring(x, sep=',')})

print (df)
    A           B
0  34  [1.0, 2.0]
1  24  [3.0, 4.0]
1 голос
/ 08 апреля 2020

Вы можете использовать применить, чтобы изменить этот формат:

df['B'] = df['B'].apply(lambda x: np.fromstring(x, sep=','))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...