【问题标题】:Pandas - determine value of column by using a functionPandas - 使用函数确定列的值
【发布时间】:2017-07-30 22:51:33
【问题描述】:

我正在尝试为我现有的 pandas 文件添加一个新值。我的 pandas 文件是我使用以下代码读取的 .CSV 文件:

import pandas as pd
import numpy as np
import csv

df = pd.read_csv('coordinatesCSV.csv', sep=';', header=None)
df.columns = ['Longitude','Lattitude']

df.head()

Pandas DataFrame 的 .head 部分如下所示

    Longitude   Lattitude
0   52.379512   4.896694
1   52.379250   4.896995
2   52.379289   4.897574
3   52.378844   4.897918
4   52.378844   4.897918

我想添加一个名为“TimeStamp”的新列。我希望这个时间戳是我使用以下代码生成的随机时间:

def random_date(start,l):
   current = start
   while l >= 0:
    current = current + datetime.timedelta(minutes=randrange(10))
    yield current
    l-=1

for x in reversed(list(random_date(startDate,1))):
    df['Timestamp'] = x

我的函数的问题是它只计算一个随机时间并将其设置为我的 pandas DataFrame 中所有行的值,所以我的数据帧现在如下所示:

    Longitude   Lattitude   Timestamp
0   52.379512   4.896694    2013-09-20 13:00:00
1   52.379250   4.896995    2013-09-20 13:00:00
2   52.379289   4.897574    2013-09-20 13:00:00
3   52.378844   4.897918    2013-09-20 13:00:00
4   52.378844   4.897918    2013-09-20 13:00:00

我如何确保我的函数为我的数据帧的每一行计算一个新的时间戳,而不仅仅是上面的一个时间戳。 非常感谢!

【问题讨论】:

  • 别管我在睡觉,通过调整我的代码来解决它:df['Timestamp'] = random_date(startDate,1)

标签: python python-2.7 pandas timestamp


【解决方案1】:

当您编写df['Timestamp'] = x 时,您将Series 的每个条目设置为x。相反,使用你的函数的一种方法是简单地让

df['Timestamp'] = list(random_date(startDate, len(df) - 1))[::-1]

【讨论】:

    【解决方案2】:

    一种方法是(假设 startDate 也是一列)

    df['Timestamp'] = df['startDate'].map(random_date)
    

    另一个选项(假设 startDate 是常量)是只创建一个与数据框大小相同的列表。然后将该列表分配给列。

    df['Timestamp'] = [random_date(startDate,1) for _ in xrange(len(df))]
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2017-11-28
      • 1970-01-01
      • 2017-01-02
      • 2018-05-08
      • 2021-09-01
      • 2018-12-20
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多