Датафрейм Время к дате - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть столбец в кадре данных, который содержит сочетание даты и времени. Столбец имеет тип объекта. Я бы хотел, чтобы в каждой строке была указана полная дата, а не время. Как вы можете видеть, верхняя часть - это самое позднее время для этой даты, когда вы go вниз по списку, это всего лишь время до изменения даты, тогда время, указанное ниже, относится к этой дате, пока вы не достигнете предыдущей даты, и оно повторяется до конца список. После преобразования каждая строка должна иметь МММ-ДД-ГГ чч: мм (час / мин), заранее благодарю.

пример данных ниже

Дата и время

  • апр. -23-20 08:20 AM
  • 07: 40 AM
  • 07: 26 AM
  • 07: 25 AM
  • 06: 38 AM
  • 06 : 00 AM
  • 05: 25 AM
  • 02: 55 AM
  • Apr-22-20 08:37 PM
  • 06: 39 PM
  • 05 : 00 PM
  • 04: 16 PM
  • 03: 34 PM
  • 03: 08 PM
  • 12: 37 PM
  • Apr-21-20 09 : 31:00
  • 08: 00 вечера
  • 07: 27 вечера
  • 06: 25 вечера
  • 04: 21 вечера
  • 04: 08 вечера
  • 02: 15PM
  • 02: 09 PM

Извините, я не смог найти способ добавить это в разделе комментариев. Но функция выглядит так

Код не ошибка. Создает новый столбец 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

1 Ответ

1 голос
/ 24 апреля 2020

Вот возможный подход

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)
...