【发布时间】:2018-03-26 20:53:00
【问题描述】:
我很清楚以前有人问过类似性质的问题,但是在尝试了大多数传统方法后,我完全不知所措。
我有一个包含多个变量的数据框,我从中选择了 5 个变量并将这些变量分组到一个公共属性:“城市”。
我正在尝试根据每个城市从属性“driver_count”中获取唯一值:
city driver_count type date fare ride_id
0 Kelseyland 63 Urban 2016-08-19 04:27:52 5.51 6246006544795
1 Kelseyland 63 Urban 2016-04-17 06:59:50 5.54 7466473222333
2 Kelseyland 63 Urban 2016-05-04 15:06:07 30.54 2140501382736
3 Kelseyland 63 Urban 2016-01-25 20:44:56 12.08 1896987891309
4 Kelseyland 63 Urban 2016-08-09 18:19:47 17.91 8784212854829
...
应该很简单吧?我只是按“城市”对数据框进行分组,然后使用 pd.unique() 函数得出我唯一的“驱动程序计数”值。
pyber_df_drivers_unique=pyber_df_cities.groupby("city") # Pulls the unique value for the number of drivers in each City
U_pyber_df_drivers = pyber_df_drivers_unique["driver_count"].unique()
>>> city
Alvarezhaven [21]
Alyssaberg [67]
Anitamouth [16]
Antoniomouth [21]
Aprilchester [49]
...
Name: driver_count, dtype: object
这就是我的麻烦开始的地方:我正在创建一个新的数据框来对我所有转换后的属性(其他变量的平均值、计数等)进行分组,以便我可以绘制我的数据。问题是,U_pyber_df_drivers 被归类为对象,而不是整数或数字类型(上面输出中的括号可能也表明了这一点)。
pd.to_numeric:
pd.to_numeric(U_pyber_df_drivers)
>>>
ERROR Invalid object type at position 0
#What's at position 0?
U_pyber_df_drivers[0]
>>>
array([21], dtype=int64)
我不明白这个错误。我尝试过其他方法,例如 df.astype(str)、df.convert_objects(convert_numeric=True)、df.infer_objects(),甚至 pd.factorize()...将我的变量从对象转换为数字类型(我将详细列出所有这些,但鉴于这个错误是一切的开始,我宁愿理解它以避免将来将意大利面扔到墙上)。
【问题讨论】:
-
我猜
U_pyber_df_drivers.str[0]就足够了 -
你一定是在开玩笑吧……它成功了,谢谢……但是为什么呢?
-
我可以解释一下,但首先,我需要知道您的列表中是否存在多个值的可能性?如果是,那么这可能不是一个好的解决方案,因为
.str[0]只会从每个列表中提取第一项。 -
不,我从主 DataFrame 中提取了“Drivers Count”变量,因此每个“City”(索引)属性只有一个值。
-
因此我的输出是:“city Alvarezhaven 21 Alyssaberg 67 Anitamouth 16 Antoniomouth 21 Aprilchester 49 (....) Name: driver_count, dtype: int64"
标签: python pandas type-conversion pandas-groupby