Есть некоторые проблемы с вашим кодом, и, в частности, ваши имена столбцов в вашем CSV-файле отличаются от имен назначаемых вами dtypes.Это выдаст ошибку, потому что они должны точно соответствовать.Поэтому, используя это в качестве входного файла (я пытался воспроизвести ваш как можно больше):
Location_Lat,Location_Long,Location_H,Location_Z,QOS_RSRP
47.46058,-123.053,6,98588,-115
47.62989,-122.81,87,98312,-114
47.54865,-122.859,9,98312,-113
Я заметил, что у вас есть один дополнительный столбец (Location_Z), который вы не вызывали в своих dtypes.Я установил фрейм данных для назначения dtypes и использования указанных столбцов на основе вашей информации выше.Вы можете указать все, что вы хотите в функции pd.read_csv()
, следующим образом:
import sys
import pandas как pd import numpy as np
df = pd.read_csv('fun.csv', header=0, usecols=['Location_Lat',
'Location_Long',
'Location_H',
'QOS_RSRP'],
dtype={'Location_Lat':np.float32,
'Location_Long':np.float32,
'Location_H':np.int,
'QOS_RSRP':np.int}, low_memory=False)
print(df)
print(df.dtypes)
Несколько вещей, на которые стоит обратить внимание.Я явно назначил header=0
.Это гарантирует, что pandas использует первую строку csv в качестве заголовка (поэтому я знаю, как будут называться имена).Если вы хотите, чтобы это была другая строка, просто установите header=(line you want)
Во-вторых, я сказал pandas явно использовать только 4 из 5 столбцов, так как вы не указали dtype для столбца Location_Z
, яне включал этот столбец, но если вы хотите его, вы можете просто включить его в параметр usecols=
выше и указать тип dtype в параметре dtype=
.
Наконец, dtype dict использует имена столбцов из фрейма данных для назначения dtypes.К счастью, мы присвоили столбцам header=0
, так что pandas уже «знает» имена столбцов.В пандах плавающие и целые числа имеют действительно низкую стоимость памяти по сравнению со строковым объектом.Причина, по которой ваш df возвращает dtypes объекта для всего, состоит в том, что заголовок может быть прочитан как row1 вашего df, и в этом случае pandas назначит весь столбец как dtypes объекта.Результат вышеприведенного кода при выводе на экран выглядит следующим образом:
[dkennetz@hpc02 fun_temp]$ python3.5 pandas_fun.py
Location_Lat Location_Long Location_H QOS_RSRP
0 47.460579 -123.053001 6 -115
1 47.629890 -122.809998 87 -114
2 47.548649 -122.859001 9 -113
Location_Lat float32
Location_Long float32
Location_H int64
QOS_RSRP int64
dtype: object
Итак, мы видим, что только 4 из 5 столбцов загружаются в фрейм данных, и что dtypes действительно являются float32 и int64 какназначены.dtype: object
внизу относится к самому кадру данных, который всегда будет объектом данных в пандах.
Я надеюсь, что это устранит любые ваши вопросы!