У меня есть несколько CSV-файлов, которые выглядят примерно так:
>>> print(df)
x x.1 x.2 x.3 ... Unnamed: 33 Unnamed: 34 Unnamed: 35 Unnamed: 36
0 x x x x ... x x x x
1 x x x x ... x x x x
2 x x x x ... NaN NaN NaN NaN
3 x x x x ... NaN NaN NaN NaN
4 x x x x ... NaN NaN NaN NaN
5 x x x x ... NaN NaN NaN NaN
6 x x x x ... NaN NaN NaN NaN
7 x x x x ... NaN NaN NaN NaN
8 x x x x ... NaN NaN NaN NaN
9 x x x x ... NaN NaN NaN NaN
10 x x x x ... NaN NaN NaN NaN
11 x x x x ... NaN NaN NaN NaN
12 x x x x ... NaN NaN NaN NaN
13 x x x x ... NaN NaN NaN NaN
14 A A A A ... NaN NaN NaN NaN
15 B B B B ... NaN NaN NaN NaN
16 C C C C ... NaN NaN NaN NaN
17 D D D D ... NaN NaN NaN NaN
18 E E E E ... NaN NaN NaN NaN
19 F F F F ... NaN NaN NaN NaN
20 x x x x ... NaN NaN NaN NaN
21 x x x x ... NaN NaN NaN NaN
22 x x x x ... NaN NaN NaN NaN
23 x x x x ... NaN NaN NaN NaN
24 x x x x ... NaN NaN NaN NaN
[25 rows x 37 columns]
В этом CSV-файле много разных типов данных, но мне нужны только те данные, которые помечены A-F. У меня есть большое количество этих CSV-файлов, поэтому я хочу объединить их вместе, но только с теми данными, которые мне нужны.
У меня есть два подхода, один лучше другого.
(1) Данные, которые мне нужны, почти всегда находятся в строке 14-19 и имеют длину 4 столбца. Итак, о чем я думал каждый раз, когда я читал в одном из этих CSV-файлов, я могу пропускать строки выше 14 и ниже 19, однако я не знаю, как это сделать?
Что-то вроде этого data = pd.read_csv(file,skiprows=[0:14]) однако я также хочу пропустить все строки после 19? Есть ли способ просто загрузить строки 14-19 только столбцами 0-4?
(2) Моя вторая идея. Я не уверен, что это возможно, но в случае, если данные не отображаются в строке 14-19 в одном файле, возможно, я смогу заставить Python каким-то образом искать нужные мне данные, и это избавит от любых ошибок при получении неправильные строки?
Любая помощь приветствуется, спасибо!






У pandas есть дополнительный параметр nrows, который можно использовать для чтения только указанного количества строк.
>>> import pandas as pd
>>> df = pd.read_csv(filename, skiprows=list(range(14)), n_rows=6)
>>> df
x x.1 x.2 x.3 ... Unnamed: 33 Unnamed: 34 Unnamed: 35 Unnamed: 36
0 A A A A ... NaN NaN NaN NaN
1 B B B B ... NaN NaN NaN NaN
2 C C C C ... NaN NaN NaN NaN
3 D D D D ... NaN NaN NaN NaN
4 E E E E ... NaN NaN NaN NaN
5 F F F F ... NaN NaN NaN NaN
Извините, да, я ошибся. Параметр должен быть skiprows, а не skip_rows. Кроме того, документы pandas указывают, что skiprows - это «Номера строк для пропуска (0-индексированные) или количество строк для пропуска (int) в начале файла». Так что это должен быть список или int. Я скорректировал ответ соответственно.
следуя вашей второй идее «в случае, если данные не отображаются в строке 14-19 в одном файле»:
#getting the desired rows
df_desired = data.loc[ (data['x'] == 'A') | (data['x'] == 'B')|(data['x'] == 'C') | (data['x'] == 'E')| (data['x'] == 'F')]
#getting the first 4 columns
df=df.ix[:,[0:4]]
Привет, я получаю неверный синтаксис точки с запятой в 0:4?
у меня нет ваших фактических данных для проверки, но вторая строка кода просто получает первые 4 столбца, можете ли вы попробовать разные способы?
Пропуск строк на самом деле не работает? Я получаю тот же результат, пропуская первые 3 строки, что и пропуская первые 7 строк, есть идеи, почему это так?