我有一個由pandasDataFrame創建的pyarrow.Table
。 df = pd.DataFrame({"col1": [1.0, 2.0], "col2": [2.3, 2.4] })
df.columns = pd.MultiIndex. from_tuples([('a',100), ('b', 200)], names=('name', 'number')
df.index = pd.MultiIndex. from_tuples([('a',100), ('b', 200)], names=('name', 'number')
table = pa.Table.from_pandas(df)
原始df有成千上萬的列和行,而且值都是float64,因此在我轉換為pyarrow Table時變成了double
我怎樣才能將它們全部改為float32呢?
我嘗試了以下方法:
schema = pa.schema([pa.field("('a',100)", pa.float32()),pa.field("('b',200)", pa.float32()),])
table = pa.Table.from_pandas(df, schema=schema)
但是這抱怨模式和資料框架不匹配:KeyError。"在指定的模式中出現的名稱'('a',100)'在列或索引中沒有找到"
uj5u.com熱心網友回復:
首先將資料框轉換為表,然后改變模式,使每個float64變成float32:
table = pa.Table.from_pandas(df)
schema = pa.schema(
[
pa.field(f.name, pa.float32() if f.type == pa.float64() else f.type)
for f in table.schema
]
)
table.cast(schema)
uj5u.com熱心網友回復:
你可以將表投到你需要的型別上
table = pa.Table.from_pandas(df)
table = table.cast(pa.schema([("('a', '100')", pa.float32()) 。
("('b', '200')", pa.float32())。
("name", pa.string())。
("number", pa.string()]))
我懷疑你是否能找到一種方法來為Table.from_pandas使用Pandas多鍵索引時提供一個作業模式。在這種情況下,列的名稱是一個tuple(('a', 100)),但是對于Arrow schema列的名稱只能是字串。所以你將永遠無法創建一個指向與資料框架相同的列名的模式。
這就是為什么事后鑄造會起作用,因為在你制作了一個Arrow表之后(因此所有的列名都變成了字串),你最終可以向鑄造函式提供等于列名的字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/307671.html
標籤:
下一篇:按索引串聯資料幀的串列
