Чтение данных из текстового файла с переменными номерами столбцов - PullRequest
0 голосов
/ 20 декабря 2018

Я читаю данные из текстового файла на python, используя панд.Нет никаких значений заголовков (имен столбцов), назначенных данным в текстовом файле.Я хочу преобразовать данные в удобочитаемую форму.Проблема, с которой я сталкиваюсь, заключается в переменной длине столбца. Например, в моем текстовом файле у меня есть

    1,2,3,4,5,Hello,7,8
    1,2,3,4,5,7,8,
    1,2,3,4,5,7,8,
    1,2,3,4,5,Hello,7,8,

Теперь, когда я создаю фрейм данных, я хочу убедиться, что во второй строке вместо Hello - "NAN"записывается как значение для этого столбца нет.и в конце после присвоения имен столбцов и перестановки фрейм данных будет выглядеть так:

    1,2,3,4,5,Hello,7,8
    1,2,3,4,5,"NA,"7,8,
    1,2,3,4,5,"NA",7,8,
    1,2,3,4,5,Hello,7,8,

1 Ответ

0 голосов
/ 20 декабря 2018

Ответ на обновленный вопрос, а также обобщенное решение для такого случая.

focus_col_idx = 5   # The column where you want to bring NaN in expected output
last_idx = df.shape[1] - 1

# Fetching the index of rows which have None in last column 
idx = df[df[last_idx].isnull()].index

# Shifting the column values for those rows with index idx
df.iloc[idx,focus_col_idx+1:] = df.iloc[idx,focus_col_idx:last_idx].values

# Putting NaN for second column where row index is idx
df.iloc[idx,focus_col_idx] = np.NaN

df


+---+----+---+---+---+---+-------+---+-----+
|   |  0 | 1 | 2 | 3 | 4 |   5   | 6 |  7  |
+---+----+---+---+---+---+-------+---+-----+
| 0 |  1 | 2 | 3 | 4 | 5 | Hello | 7 | 8.0 |
| 1 |  1 | 2 | 3 | 4 | 5 | NaN   | 7 | 8.0 |
| 2 |  1 | 2 | 3 | 4 | 5 | NaN   | 7 | 8.0 |
| 3 |  1 | 2 | 3 | 4 | 5 | Hello | 7 | 8.0 |
+---+----+---+---+---+---+-------+---+-----+

Ответ на предыдущие данные

Предполагается, что только в одном столбце отсутствует значение (скажем 2-й столбец согласно вашим предыдущим данным).Вот быстрое решение -

df = pd.read_table('SO.txt',sep='\,', header=None)
df

+---+---+---+---+---+------+
|   | 0 | 1 | 2 | 3 |  4   |
+---+---+---+---+---+------+
| 0 | A | B | C | D | E    |
| 1 | A | C | D | E | None |
+---+---+---+---+---+------+


# Fetching the index of rows which have None in last column 
idx = df[df[4].isnull()].index
idx
# Int64Index([1], dtype='int64')

# Shifting the column values for those rows with index idx
df.iloc[idx,2:] = df.iloc[idx,1:4].values
df

+---+---+---+---+---+---+
|   | 0 | 1 | 2 | 3 | 4 |
+---+---+---+---+---+---+
| 0 | A | B | C | D | E |
| 1 | A | C | C | D | E |        # <- Notice the shifting.
+---+---+---+---+---+---+


# Putting NaN for second column where row index is idx
df.iloc[idx,1] = np.NaN

# Final output
df
+---+---+-----+---+---+---+
|   | 0 |  1  | 2 | 3 | 4 |
+---+---+-----+---+---+---+
| 0 | A | B   | C | D | E |
| 1 | A | NaN | C | D | E |
+---+---+-----+---+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...