Преобразовать первый строковый элемент списка списков в кортеж - PullRequest
0 голосов
/ 26 апреля 2018
ohlc = df.values.tolist()

дает мне этот список списков:

[['2018-04-09', 7044.32, 7178.11, 6661.99, 6770.73],
 ['2018-04-08', 6919.98, 7111.56, 6919.98, 7023.52],
 ['2018-04-07', 6630.51, 7050.54, 6630.51, 6911.09],
 ['2018-04-06', 6815.96, 6857.49, 6575.0, 6636.32],
 ['2018-04-05', 6848.65, 6933.82, 6644.8, 6811.47],...]

Для дальнейшей аналитики мне нужно преобразовать Datestring каждого списка в кортеж типа (2018,04,09)

ТНХ

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Расширяясь на @ совете Терри , вы можете выполнять большую часть манипуляций вверх по течению в pandas:

lst = [['2018-04-09', 7044.32, 7178.11, 6661.99, 6770.73],
       ['2018-04-08', 6919.98, 7111.56, 6919.98, 7023.52],
       ['2018-04-07', 6630.51, 7050.54, 6630.51, 6911.09],
       ['2018-04-06', 6815.96, 6857.49, 6575.0, 6636.32],
       ['2018-04-05', 6848.65, 6933.82, 6644.8, 6811.47]]

# we start with a dataframe
df = pd.DataFrame(lst)

# reassign column 0 with list comprehension + conversion to int
df[0] = [tuple(int(i) for i in x.split('-')) for x in df[0]]

# extract list
res = df.values.tolist()

[[(2018, 4, 9), 7044.32, 7178.11, 6661.99, 6770.73],
 [(2018, 4, 8), 6919.98, 7111.56, 6919.98, 7023.52],
 [(2018, 4, 7), 6630.51, 7050.54, 6630.51, 6911.09],
 [(2018, 4, 6), 6815.96, 6857.49, 6575.0, 6636.32],
 [(2018, 4, 5), 6848.65, 6933.82, 6644.8, 6811.47]]
0 голосов
/ 26 апреля 2018

Использование list comprehension и изменение списка на месте:

lists = [['2018-04-09', 7044.32, 7178.11, 6661.99, 6770.73],
         ['2018-04-08', 6919.98, 7111.56, 6919.98, 7023.52],
         ['2018-04-07', 6630.51, 7050.54, 6630.51, 6911.09],
         ['2018-04-06', 6815.96, 6857.49, 6575.0, 6636.32],
         ['2018-04-05', 6848.65, 6933.82, 6644.8, 6811.47]]

lists[:] = [[tuple(item.split('-')) if isinstance(item, str) else item for item in sub] 
            for sub in lists] 

lists

[[('2018', '04', '09'), 7044.32, 7178.11, 6661.99, 6770.73],
 [('2018', '04', '08'), 6919.98, 7111.56, 6919.98, 7023.52],
 [('2018', '04', '07'), 6630.51, 7050.54, 6630.51, 6911.09],
 [('2018', '04', '06'), 6815.96, 6857.49, 6575.0, 6636.32],
 [('2018', '04', '05'), 6848.65, 6933.82, 6644.8, 6811.47]]
0 голосов
/ 26 апреля 2018

Подсказка: вы можете разбить строку по определенному разделителю следующим образом.

>>> s = '2018-04-09'
>>> s.split('-')
['2018', '04', '09']

Вы также можете превратить list в tuple, набрав его:

>>> L = ["a", "b", "c"]
>>> tuple(L)
('a', 'b', 'c')

Обратите внимание, что эти функции неизменяемы - они не изменяют объект, они возвращают результат (так что вам, например, нужно будет сделать L = tuple(L)).

Надеюсь, это поможет вашей проблеме.

...