Импорт данных в Python с Pandas только для определенных c строк - PullRequest
0 голосов
/ 04 апреля 2020

Я действительно новичок в Python, и я надеюсь, что это правильное сообщество для моего вопроса. Извините, если это не так.

Я пытаюсь импортировать данные из файла .txt с pandas. Файл выглядит так:

# Raman Scattering Spectrum
# X-Axis:  Frequency (cm-1)
# Y-Axis:  Intensity (10-36 m2 cm/sr)

# Harmonic Data

# Peak information (Harmonic)
#                  X                   Y
#      20.1304976000        1.1465331676
#      25.5433266000        6.0306906544
...
#    3211.8081700000        0.3440113123
#    3224.5118500000        0.8814596030

# Plot Curve (Harmonic)
#                  X                   Y               DY/DX
    0.0000000000        8.4803414671        0.6546818124
    8.0000000000       17.8239097502        2.0146387573

Я уже написал этот фрагмент кода для импорта моих данных:

import pandas as pd
# import matplotlib as plt
# import scipy as sp

data = pd.read_csv('/home/andrea/Schreibtisch/raman_gauss.txt', sep='\t')
data

Теперь я получил только один столбец. Если я попробую это с

pd.read_fwf(file)

, я получу 3 столбца, но значения x и y из кривой графика (гармоники c) находятся в одном столбце.

Теперь я хочу импортировать из кривой графика (Harmoni c) значения x, y и DY / DX в различных переменных или контейнерах в виде ряда. Часть для меня - это как разделить x и y теперь на 2 столбца и как python сказать, что импорт должен начинаться с номера строки из сюжета cuve (harmonix) +2 строки.

Я думаю об этом еще и моей идеей было проверить все контейнеры на наличие строки «Кривая графика» (Harmoni c). Тогда я получаю новую серию с истиной или ложью. Затем мне нужно прочитать, какой номер строки является верным для поискового слова. И затем я начинаю импорт с этой строки ... Я слишком новичок ie до Python, и я еще не знаком с документацией, в которой я нашел команду, которую должен использовать.

Кто-нибудь дает мне советы или что-то в этом роде? А как разбить столбцы?

Спасибо большое!

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Во-первых: большое спасибо за ваш ответ. Это мне очень помогает. Я пытался использовать функцию комментария, но я не могу добавить 'Enter'

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

plt.plot(df.X, df.Y)
plt.legend(['simulated'])
plt.xlabel('raman_shift')
plt.ylabel('intensity')
plt.grid(True)

plt.show()

Теперь я получаю сообщение об ошибке:

TypeError                                 Traceback (most recent call last)
<ipython-input-240-8594f8545868> in <module>
     28 plt.plot(df.X, df.Y)
     29 plt.legend(['simulated'])
---> 30 plt.xlabel('raman_shift')
     31 plt.ylabel('intensity')
     32 plt.grid(True)

TypeError: 'str' object is not callable

У меня ничего не изменилось в функции метки. В моем другом проекте эти строки работают хорошо. И я также не знаю, как считать столбец DY / DX, '/' не может использоваться в имени столбца. Ты опять получил чаевые за меня? :)

Спасибо.

0 голосов
/ 04 апреля 2020

Вы можете читать следующим образом.

Код

import pandas as pd
import re  # Regex to parse header

def get_data(filename):
   # Find row containing 'Plot Curve (Harmonic)'
    with open('data.txt', 'r') as f:
      for i, line in enumerate(f):
        if 'Plot Curve (Harmonic)' in line:
          start_row = i
          # Parse header on next line
          header = re.findall(r'\S+', next(f))[1:]
          # [1:] to skip '#' at beginnning of line
          break
      else:
        start_row = None  # not found

    if start_row:
      # Use  delimiter=r"\s+": since have multiple spaces between numbers
      # skip_rows = start_row+2: to skip to data 
      #   (skip current and header row)
      #   reference: https://thispointer.com/pandas-skip-rows-while-reading-csv-file-to-a-dataframe-using-read_csv-in-python/
      # names = header: assigns column names
      df = pd.read_csv('data.txt', delimiter=r"\s+", skiprows=start_row+2,
              names = header)

      return df

Тест

df = get_data('data.txt')
print(df)

файл data.txt

# Raman Scattering Spectrum
# X-Axis:  Frequency (cm-1)
# Y-Axis:  Intensity (10-36 m2 cm/sr)

# Harmonic Data

# Peak information (Harmonic)
#                  X                   Y
#      20.1304976000        1.1465331676
#      25.5433266000        6.0306906544
...
#    3211.8081700000        0.3440113123
#    3224.5118500000        0.8814596030

# Plot Curve (Harmonic)
#                  X                   Y               DY/DX
    0.0000000000        8.4803414671        0.6546818124
    8.0000000000       17.8239097502        2.0146387573

Вывод

    X          Y     DY/DX
0  0.0   8.480341  0.654682
1  8.0  17.823910  2.014639
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...