我想將一個Dataframe的多個列組合到一個,其中包含這些列的數組。熊貓將多個列結合到數組結果的ValueError
的這個簡單的例子:
sn | a | b | c |
---+-----+-----+-----+
a1 | 1 | 1 | None|
到
sn | a | b | c | array |
---+-----+-----+-----+-----------+
a1 | 1 | 1 | None| [1,1,None]|
我想是因爲我用熊貓(和SQL-鍊金術)來分析我的數據和寫入數據框成一個PostgreSQL做到這一點 - 使用Dataframe.to_sql的表。我在Postgres中使用numeric [],text [],integer []等測試了這個列,並且to_sql用NULL替換了None,所以這個工作原理完全按照預期工作。
要做到這一點,我寫這個簡單的功能:
def timeseries(collist):
output = []
for col in collist:
if str(col) in ['nan','None','NaT']:
col = None
output.append(col)
return output
dataframe['arraycolumn'] = dataframe.apply(lambda row: timeseries(row[collist1]), axis=1)
沒什麼可抱怨的,直到我想保存時間戳陣列(之前只是保存爲文本[])。我得到這些時間戳的格式不正確,並使用pd.to_datetime(df ['timestampcolumn']),因爲Postgresql偏好ISO時間戳(試圖在timestamp []列中保存此時間戳)。但是在使用pd.to_datetime進行投射後,我的功能不再有效。
collist = ['a','datetime']
df['c'] = df.apply(lambda row: timeseries(row[collist]), axis=1)
ValueError: Shape of passed values is (...), indices imply (...)
予製備的ipynb:https://github.com/cherryskizz/pandasarrayproblem/blob/master/theproblem.ipynb
我與Python 3.4.4,3.5.2測試此,熊貓18.1和19.0。
我可以編寫一個函數來解析這些列而不使用pd.to_datetime,但也許有其他方法可以解決這個問題嗎?有沒有熊貓功能來實現這一點?
確實很奇怪,但它的工作原理。感謝你的努力,但我現在要解決這個問題。也許有人可以解釋爲什麼索引和列會混淆或找到另一個解決方案。 – CherrySkizz