Как удалить столбец NaN? - PullRequest
0 голосов
/ 10 марта 2019

У меня есть текстовый файл имеет 3 столбца, как:

1  2  3
2  4  6
3  6  9

Я хочу организовать это как:

wave  shape  freq
  1     2      3
  2     4      6
  3     6      9 

Я использовал следующий скрипт:

import glob
import pandas as pd


import_file = glob.glob('data.txt')
for files in import_file:
     intial_data = pd.read_csv(files, header=None, delimiter="\t").values
     table = pd.DataFrame(intial_data, columns = ['wave' , 'shape', 'freq')
      print(table)

Это дало мне это

Ошибка: форма переданных значений (4, 150), индексы подразумевают (3, 150)

Я заменил строку, которая упорядочивает и описывает таблицу, добавив еще один индикатор столбца X

table = pd.DataFrame (intial_data, columns = ['wave' , 'shape', 'freq','x'])

То, что он работает хорошо и дал мне этот результат

       wave     shape    freq     x
 0    1.0000   2.0000   3.0000   NaN
 1    2.0000   4.0000   6.0000   NaN
 2    3.0000   6.0000   9.0000   NaN

Я не могу понять, что нам столбец NaN, и мне нужно удалить его из моей работы

Пожалуйста, любые предложения ??

Ответы [ 3 ]

2 голосов
/ 10 марта 2019

Не принимайте предложения отбросить NaN с. Это было бы решением XY Problem, а не решением причины .

Используйте вместо

intial_data = pd.read_csv('data.txt', header=None, delim_whitespace=True)

или

intial_data = pd.read_csv('data.txt', header=None, sep='\s+')

Причина, по которой вы получаете эту ошибку, заключается в том, что в вашем файле data.txt есть дополнительная вкладка в конце. pandas интерпретирует это как дополнительный столбец NaN с.

Итак, даже если вы видите

1  2  3
2  4  6
3  6  9

что у вас, скорее всего, есть

1\t2\t3\t
2\t4\t6\t
3\t6\t9\t

Последний \t добавляет дополнительный столбец.

0 голосов
/ 10 марта 2019
df.dropna(1,'all')

Вывод:

   wave  shape  freq
0   1.0    2.0   3.0
1   2.0    4.0   6.0
2   3.0    6.0   9.0

Или же вы можете просто прочитать первые 3 столбца из вашего файла с параметром usecols, равным pd.read_csv.С помощью следующего кода вы получите вашу переменную table прямо, не читая сначала intial_data:

table = pd.read_csv(files,
                    header=None,
                    delimiter="\t",
                    usecols=range(3),
                    names=['wave', 'shape', 'freq'])
0 голосов
/ 10 марта 2019

Чтобы удалить столбцы со значениями NaN, используйте df.dropna (axis = 'columns'). Вы можете получить больше информации здесь: документация dropna

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