【问题标题】:How can I add columns in a data frame?如何在数据框中添加列?
【发布时间】:2015-06-15 14:26:46
【问题描述】:

我有以下数据:

例子:

DRIVER_ID;TIMESTAMP;POSITION

156;2014-02-01 00:00:00.739166+01;POINT(41.8836718276551 12.4877775603346)

我想创建一个带有 4 列的 pandas 数据框,它们分别是 id、时间、经度、纬度。 到目前为止,我得到了:

cur_cab = pd.DataFrame.from_csv(
            path,
            sep=";",
            header=None,
            parse_dates=[1]).reset_index()
cur_cab.columns = ['cab_id', 'datetime', 'point']

path 指定包含数据的 .txt 文件。 我已经编写了一个函数,它从点格式的字符串中返回经度和纬度值。 如何使用附加列和拆分值扩展数据框?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    加载后,如果您使用的是最新版本的 pandas,则可以使用矢量化的 str 方法来解析列:

    In [87]:
    df['pos_x'], df['pos_y']= df['point'].str[6:-1].str.split(expand=True)
    df
    
    Out[87]:
       cab_id                   datetime  \
    0     156 2014-01-31 23:00:00.739166   
    
                                          point  pos_x  pos_y  
    0  POINT(41.8836718276551 12.4877775603346)      0      1  
    

    另外你应该停止使用from_csv,它不再更新,使用顶级read_csv,这样你的加载代码将是:

    cur_cab = pd.read_csv(
                path,
                sep=";",
                header=None,
                parse_dates=[1],
                names=['cab_id', 'datetime', 'point'],
                skiprows=1)
    

    【讨论】:

    • 你添加skirows有什么特别的原因吗?
    • 因为你传递了header=None 它认为你的标题行是数据,我们必须跳过该行,所以它不会将其解析为数据
    • 但我实际上没有标题。这就是为什么我首先使用header=None ;)
    • 那么您的示例数据中的 DRIVER_ID;TIMESTAMP;POSITION 是什么?
    • 只是对数据集的描述,但我同意它可能令人困惑:P
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2018-06-16
    • 2020-06-10
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多