Чтение забавного текстового файла с разделителями

#pandas

Вопрос:

У меня есть txt-файл, который выглядит так. При чтении он считывает его как одну колонку. Я пробовал использовать много разных sep=

 $Eid, X, Y, Z, Mass
  856395   3.4694275e-01  -9.7051837e-02   6.4922004e 00   7.3136240e-03
  856396   3.4694746e-01  -9.7053476e-02   6.5071974e 00   7.3139570e-03
  856397   3.4695095e-01  -9.7054794e-02   6.5221949e 00   7.3139421e-03
  856398   3.4695303e-01  -9.7055703e-02   6.5371923e 00   7.3139500e-03
 
 df_data = pd.read_csv("ElCEntroid kopi-kopi.txt", skiprows=2, sep="t")
 

Ответ №1:

Я представляю t , что это не ваш разделитель, а скорее таблицы ( t ):

вы можете попробовать:

 df_data = pd.read_csv('ElCEntroid kopi-kopi.txt',
                      skiprows=1, header=None,
                      sep='s '                    # or sep='t'
                     )
 

выход:

         0         1         2         3               4
0  856395  0.346943 -0.097052  6.492200   7.3136240e-03
1  856396  0.346947 -0.097053  6.507197   7.3139570e-03
2  856397  0.346951 -0.097055  6.522195   7.3139421e-03
3  856398  0.346953 -0.097056  6.537192   7.3139500e-03
 

Кстати, если вас интересует заголовок, вы также можете использовать:

 df_data = pd.read_csv('ElCEntroid kopi-kopi.txt', sep=",?s ", engine='python')
 

выход:

      $Eid         X         Y         Z            Mass
0  856395  0.346943 -0.097052  6.492200   7.3136240e-03
1  856396  0.346947 -0.097053  6.507197   7.3139570e-03
2  856397  0.346951 -0.097055  6.522195   7.3139421e-03
3  856398  0.346953 -0.097056  6.537192   7.3139500e-03
 

Комментарии:

1. Идеально! Работает — еще одна мелочь. Как мне установить столбец $Eid в качестве индекса col с именем «elementId»?

2. И как мне удалить это: парсер: Возврат к движку «python», потому что движок » c «не поддерживает разделители регулярных выражений (разделители > 1 символ и отличные от» s «интерпретируются как регулярное выражение); вы можете избежать этого предупреждения, указав engine= «python». функция возврата(*args, **кварги)

3. @AsbjoernLund 1 — добавить .set_index('$Eid').rename_axis('ElementId') 2 — это предупреждение, вы можете добавить engine='python' в качестве аргумента read_csv

Ответ №2:

Является ли файл файлом фиксированной ширины? Если это так, вы можете использовать pd.read_fwf() вместо этого. Это действительно полезно, если вы заранее знаете ширину каждого столбца. Я предполагаю здесь, что Eid, X, Y, Z, Масса имеют ширину 8, 16, 16, 16 и 16 соответственно, но вы можете изменить ее, если она отличается.

 df = pd.read_fwf("ElCEntroid kopi-kopi.txt", skiprows=2, widths=[8, 16, 16, 16, 16])