смещение заголовков столбцов read_csv - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь прочитать в текстовом файле через запятую в Python с read_csv.Однако Python берет заголовок и смещает его вправо на единицу.

Пример файла данных с меньшим количеством столбцов, чем у меня есть: (пример файла с большим количеством данных: https://www.dropbox.com/s/5glujwqux6d0msh/test.txt?dl=0)

DAY,TIME,GENVEG,LATI,LONGI,AREA,CHEM
 226,  1200,     2,   -0.5548999786D+01,    0.3167600060D+02,    0.1000000000D+07, NaN
 226,  1115,     2,   -0.1823500061D+02,    0.3668500137D+02,    0.1000000000D+07, NaN

Если я попробую следующее (где infile_fire - вышеупомянутый текстовый файл):

df_fires = pd.read_csv(infile_fire,sep="\,",skipinitialspace=True,engine='python')

Я получу это ниже. Как видите, DAY на самом делевыше того, что должно быть в столбце TIME (обратите внимание, что значение в столбце AREA взято из данных, которые я имею в наборе данных большего размера, который не показан в подмножестве примеров выше) enter image description here

Я также попытался df_fires = pd.read_csv(infile_fire).reset_index(), и хотя он действительно создает новый индекс (как мне бы хотелось), он также перемещает столбец 226 и называет его index вместо DAY как и должно быть. enter image description here

Я также попробовал следующее, но все же получил тот же результат (смещенные заголовки)

df = pd.read_csv(infile_fire)

df = pd.read_csv(infile_fire,index_col=None)

df = pd.read_csv(infile_fire,index_col=0)

Как это исправить? Я просто хочу прочитать в текстовом файле, и Python настроил новый индекс иоставьте заголовки как есть.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Как файл file.txt, содержащий файл, который вы хотите прочитать.

file.txt = """
    DAY,TIME,GENVEG,LATI,LONGI,AREA
     226,  1200,     2,   -0.5548999786D+01,    0.3167600060D+02,    0.1000000000D+07
     226,  1115,     2,   -0.1823500061D+02,    0.3668500137D+02,    0.1000000000D+07
    """

Использование:

import pandas as pd

Чтение файла:

df = pd.read_csv('file.txt')

Есливы посмотрите на свой df.AREA[0], это будет примерно так:

'    0.1000000000D+07'

Используйте регулярные выражения для удаления пробелов:

df.replace('(^\s+|\s+$)', '', regex=True, inplace=True)

ЕслиВы пытаетесь позвонить вашему df сейчас, результат будет:

   DAY  TIME  GENVEG               LATI             LONGI              AREA
0  226  1200       2  -0.5548999786D+01  0.3167600060D+02  0.1000000000D+07
1  226  1115       2  -0.1823500061D+02  0.3668500137D+02  0.1000000000D+07

Итак, ваш df.AREA[0] будет выглядеть примерно так:

'0.1000000000D+07'

Как и другие,например: df.LATI[0]

'-0.5548999786D+01'
0 голосов
/ 26 февраля 2019

Установка индекса в False решает эту проблему.

df = pd.read_csv(infile_fire,index_col=False)

0 голосов
/ 26 февраля 2019

без возни с опциями, как Панды просто делает правильные вещи, см. sep в документе read_csv и csv.Sniffer .

from io import StringIO

import pandas as pd

data = """
DAY,TIME,GENVEG,LATI,LONGI,AREA
 226,  1200,     2,   -0.5548999786D+01,    0.3167600060D+02,    0.1000000000D+07
 226,  1115,     2,   -0.1823500061D+02,    0.3668500137D+02,    0.1000000000D+07
"""

df = pd.read_csv(StringIO(data))
df

enter image description here

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