相关疑难解决方法(0)

为什么使用字符串和timedeltas转换数据框转换dtype?

这种行为对我来说似乎很奇怪:id当转换df另一列是timedelta时,列(字符串)转换为时间戳.

import pandas as pd
df = pd.DataFrame({'id': ['00115', '01222', '32333'],
                   'val': [12, 14, 170]})
df['val'] = pd.to_timedelta(df.val, unit='M')

print(df.T)
#                         0                      1                      2
#id  0 days 00:00:00.000000 0 days 00:00:00.000001 0 days 00:00:00.000032
#val      365 days 05:49:12      426 days 02:47:24     5174 days 06:27:00

type(df.T[0][0])
#pandas._libs.tslib.Timedelta
Run Code Online (Sandbox Code Playgroud)

没有timedelta它按照我的预期工作,并且id列仍然是一个字符串,即使另一列是一个整数,所有字符串都可以安全地转换为整数.

df2 = pd.DataFrame({'id': ['00115', '01222', '32333'],
                    'val': [1, 1231, 1413]})

type(df2.T[0][0])
#str
Run Code Online (Sandbox Code Playgroud)

为什么id在第一个实例中更改get 的类型,而不是第二个实例?

python pandas

9
推荐指数
1
解决办法
393
查看次数

python:如何融化保留特定顺序/自定义排序的数据框

我有一个数据框 df

Cat  B_1 A_2 C_3
A      1   2   3
B      4   5   6
C      7   8   9
Run Code Online (Sandbox Code Playgroud)

我想将其转换为数据框,以便 Label 列中的行遵循每个类别的 df 列的顺序。

Desired output

    Cat Label Value
    A     B_1    1
    A     A_2    2
    A     C_3    3
    B     B_1    4
    B     A_2    5
    B     C_3    6
    C     B_1    7
    C     A_2    8
    C     C_3    9  
Run Code Online (Sandbox Code Playgroud)

当我尝试

pd.melt(df, id_vars=["Cat"], var_name="Label",value_name="Value")
Run Code Online (Sandbox Code Playgroud)

我在标签列中丢失了所需的顺序,结果排序如下,

Cat Label Value
A     B_1    1
B     B_1    4
C     B_1    7
A     A_2    2
...
Run Code Online (Sandbox Code Playgroud)

可以在熔化函数中强制指定所需的行顺序吗?如果没有的话,如何实现这种自定义排序呢?


更新

我重命名了标签,因为它们不遵循字母顺序,因此简单的排序不起作用

python dataframe pandas

3
推荐指数
1
解决办法
3916
查看次数

标签 统计

pandas ×2

python ×2

dataframe ×1