【问题标题】:Dataframe Time to Date time数据框时间到日期时间
【发布时间】:2020-04-24 12:34:37
【问题描述】:

我在数据框中有一列混合了日期和时间。 该列是对象类型,我希望每一行都有完整的日期,而不仅仅是时间。 正如您所看到的,顶部是该日期的最新时间,因为您在列表中向下移动它只是日期更改之前的时间,然后它下面的时间是该日期的时间,直到您到达前一个日期并且它重复到列表末尾。转换后,每一行都应该有 MMM-DD-YY hh:mm(am/pm) 提前谢谢你。

下面的示例数据

日期时间

  • Apr-23-20 08:20AM
  • 07:40AM
  • 07:26AM
  • 07:25AM
  • 06:38AM
  • 06:00AM
  • 05:25AM
  • 02:55AM
  • Apr-22-20 08:37PM
  • 06:39 下午
  • 下午05:00
  • 04:16PM
  • 03:34PM
  • 03:08PM
  • 下午 12:37
  • Apr-21-20 09:31PM
  • 08:00PM
  • 07:27PM
  • 下午 6:25
  • 04:21PM
  • 下午 4:08
  • 02:15PM
  • 02:09PM

抱歉,我找不到在评论部分添加此内容的方法。但是函数看起来是这样的

代码没有错误。创建新的 Datetime2 列,但不会将您的更改应用于最后一行 df['col'] = pd.Series(x)

def get_news2(ticker):
"""
Returns a list of sets containing news headline and url

:param ticker: stock symbol
:return: list
"""
ticker = 'AAPL'
NEWS_URL = 'https://finviz.com/news.ashx'
STOCK_URL = 'https://finviz.com/quote.ashx'
page_parsed, _ = http_request_get(url=STOCK_URL, payload={'t': ticker}, parse=True)
table = page_parsed.cssselect('table[class="fullview-news-outer"]')[0]
all_news = page_parsed.cssselect('a[class="tab-link-news"]')
headers = ['Datetime', 'Description', 'Space', 'Source']
urls = [row.get('href') for row in all_news] 
data = [dict(zip(headers, row.xpath('td//text()'))) for row in table[0:]]
df1 = pd.DataFrame(urls) 
df2 = pd.DataFrame(data) 
mergedDf = df2.merge(df1, left_index=True, right_index=True)
mergedDf = mergedDf.rename(columns={0: "url"})
mergedDf = mergedDf.drop(['Space'], axis=1)
mergedDf['ticker'] = ticker
x = mergedDf['Datetime'].str.split(' ').to_list()  
for i, item in enumerate(x): 
    if len(item) == 2: 
        tem = item[0] 
        x[i] = ' '.join(item) 
else: 
    x[i] = ' '.join([tem, item[0]]) 
mergedDf['Datetime2'] = pd.Series(x)
return mergedDf

【问题讨论】:

  • 您真的希望这些值是datetime.datetime 对象还是只是str 上述格式的对象?

标签: python dataframe datetime-format


【解决方案1】:

这是一种可能的方法

x = df['col'].str.split(' ').to_list()  
for i, item in enumerate(x): 
    if len(item) == 2: 
        tem = item[0] 
        x[i] = ' '.join(item) 
    else: 
        x[i] = ' '.join([tem, item[0]]) 

df['col'] = pd.Series(x)

【讨论】:

  • 好的,所以代码工作正常,就像我自己运行它一样。没问题。如果我将代码放在函数中,它将不起作用。
  • @LeoTorres 你把else 放在正确的位置了吗?什么错误?
  • 抱歉睡着了。就像我说的没有错误。它创建列它只是不修复它保持不变的时间
  • @LeoTorres print x 沿途跟踪其变化。
  • 不,你是对的,我有其他错误的地方。 else 需要再缩进 1 个。我讨厌python缩进。现在可以使用了,谢谢!
猜你喜欢
  • 2018-06-16
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2016-11-11
  • 2019-03-04
相关资源
最近更新 更多