数据框时间到日期时间
Dataframe Time to Date time
我在数据框中有一列混合了日期和时间。
该列是我希望每一行都具有完整日期而不仅仅是时间的对象类型。
正如您所看到的那样,顶部是该日期的最晚时间,当您沿着列表向下移动时,它只是直到日期更改的时间,然后它下面的时间是该日期的时间,直到您到达上一个日期并重复直到列表末尾。转换后,每一行都应该有 MMM-DD-YY hh:mm(am/pm) 提前谢谢你。
下面的示例数据
日期时间
- 20 年 4 月 23 日 08:20AM
- 07:40AM
- 07:26AM
- 07:25AM
- 06:38AM
- 06:00AM
- 05:25AM
- 02:55AM
- 20 年 4 月 22 日 08:37PM
- 下午 6:39
- 下午 5:00
- 下午 4:16
- 下午 3:34
- 下午 3:08
- 12:37PM
- 20 年 4 月 21 日 09:31PM
- 08:00PM
- 下午 7:27
- 下午 6:25
- 下午 4:21
- 下午 4:08
- 下午 2:15
- 下午 2:09
抱歉,我找不到在评论部分添加它的方法。但是函数看起来像这样
代码没有错误。创建新的 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
这是一个可能的方法
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)
我在数据框中有一列混合了日期和时间。 该列是我希望每一行都具有完整日期而不仅仅是时间的对象类型。 正如您所看到的那样,顶部是该日期的最晚时间,当您沿着列表向下移动时,它只是直到日期更改的时间,然后它下面的时间是该日期的时间,直到您到达上一个日期并重复直到列表末尾。转换后,每一行都应该有 MMM-DD-YY hh:mm(am/pm) 提前谢谢你。
下面的示例数据
日期时间
- 20 年 4 月 23 日 08:20AM
- 07:40AM
- 07:26AM
- 07:25AM
- 06:38AM
- 06:00AM
- 05:25AM
- 02:55AM
- 20 年 4 月 22 日 08:37PM
- 下午 6:39
- 下午 5:00
- 下午 4:16
- 下午 3:34
- 下午 3:08
- 12:37PM
- 20 年 4 月 21 日 09:31PM
- 08:00PM
- 下午 7:27
- 下午 6:25
- 下午 4:21
- 下午 4:08
- 下午 2:15
- 下午 2:09
抱歉,我找不到在评论部分添加它的方法。但是函数看起来像这样
代码没有错误。创建新的 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
这是一个可能的方法
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)