我很清楚之前已经问过类似性质的问题,但是在尝试了大多数传统方法后,我完全失去了。
我有一个包含多个变量的数据框,我从中选择了5个并将这些变量分组为一个共同的属性:' City'。
我正在尝试从属性' 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
...
应该够简单吧?我只是将我的数据框分组为' City',然后使用pd.unique()函数派生我唯一的' driver_count'值。
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()...有不同类型的错误或者根本没有做任何事情将我的变量从一个对象转换为一个数字类型(我将详细列出所有这些,但鉴于这一个错误就是启动它的所有内容,我宁愿理解它以避免在墙上扔意大利面。未来)。
答案 0 :(得分:1)
如@cᴏʟᴅsᴘᴇᴇᴅ所示,.str[0]
函数从列表中提取第一项,并且授予我的数据帧只有一个元素,它可以将对象转换为整数(我猜是唯一的原因是它将整数作为一个类型分配是因为它推断出数组的类型。)
我认为另一个解决方案是在pd.unique()函数中传递一个dtype参数。如果没有传递参数,我认为会发生的事情是pd.unique()会将每个数值分配为自己的列表,每个都定义为对象类型,因此我们最终得到一个嵌入列表中的列表(例如:[[ 0],[1],[..]]而不是预期的[0,1,..])。