是否可以将数据帧从Apache Spark导出到feather(https://github.com/wesm/feather)文件?
我正在使用 R 和 Python,我想将我的一个 Pandas DataFrames 写成一个羽毛,这样我就可以在 R 中更轻松地使用它。但是,当我尝试将它写成一个羽毛时,我收到以下错误:
ArrowInvalid: trying to convert NumPy type float64 but got float32
Run Code Online (Sandbox Code Playgroud)
我仔细检查了我的列类型,它们已经浮动 64:
In[1]
df.dtypes
Out[1]
id Object
cluster int64
vector_x float64
vector_y float64
Run Code Online (Sandbox Code Playgroud)
无论使用feather.write_dataframe(df, "path/df.feather")或 ,我都会遇到相同的错误df.to_feather("path/df.feather")。
我在 GitHub 上看到了这个,但不明白它是否相关:https : //issues.apache.org/jira/browse/ARROW-1345和https://github.com/apache/arrow/issues/1430
最后,我可以将它保存为 csv 并更改 R 中的列(或者只是在 Python 中进行整个分析),但我希望使用它。
编辑1:
尽管下面有很好的建议,但仍然有同样的问题,所以更新我的尝试。
df[['vector_x', 'vector_y', 'cluster']] = df[['vector_x', 'vector_y', 'cluster']].astype(float)
df[['doc_id', 'text']] = df[['doc_id', 'text']].astype(str)
df[['doc_vector', 'doc_vectors_2d']] = df[['doc_vector', 'doc_vectors_2d']].astype(list)
df.dtypes
Out[1]:
doc_id object
text object
doc_vector …Run Code Online (Sandbox Code Playgroud) 我想使用 .ftr 文件来快速分析数百个表。不幸的是,我在十进制和千位分隔符方面遇到了一些问题,类似于那个帖子,只是 read_feather 不允许decimal=',', thousands='.'选项。我尝试了以下方法:
df['numberofx'] = (
df['numberofx']
.apply(lambda x: x.str.replace(".","", regex=True)
.str.replace(",",".", regex=True))
Run Code Online (Sandbox Code Playgroud)
导致
AttributeError: 'str' object has no attribute 'str'
Run Code Online (Sandbox Code Playgroud)
当我把它改成
df['numberofx'] = (
df['numberofx']
.apply(lambda x: x.replace(".","").replace(",","."))
Run Code Online (Sandbox Code Playgroud)
我在结果中收到一些奇怪的(四舍五入)错误,例如 22359999999999998 而不是 2236 对于某些高于 1k 的数字。所有低于 1k 的都是真实结果的 10 倍,这可能是因为删除了“.”。的浮点数并创建该数字的 int。
试
df['numberofx'] = df['numberofx'].str.replace('.', '', regex=True)
Run Code Online (Sandbox Code Playgroud)
也会导致结果中出现一些奇怪的行为,因为有些数字在 10^12 中,而其他数字则应保持在 10^3 中。
下面是我如何从多个 Excel 文件创建我的 .ftr 文件。我知道我可以简单地从 Excel 文件创建数据帧,但这会大大减慢我的日常计算速度。
我该如何解决这个问题?
编辑:这个问题似乎来自于将 excel 文件作为非美国标准的关于十进制和千位分隔符的 df 读取,而不是将其保存为羽毛。使用pd.read_excel(f, encoding='utf-8', decimal=',', thousands='.')读取 excel …
尝试读取xlsx文件后,我收到以下错误,使用feather将其写入数据帧,然后使用feather读取相同的数据帧并使用df.head()显示结果
import pandas as pd
import feather
v = pd.__version__
#--- read in excel data
in_path = '/Users/me/Documents/python/data/FGS2000-2015.xlsx'
out_path = '/Users/me/Documents/python/data/mydata.feather'
df = pd.read_excel(in_path)
#--- write pandas dataframe to disk
feather.write_dataframe(df,out_path)
#--- read dataframe from disk
data = feather.read_dataframe(out_path)
data.head()
Run Code Online (Sandbox Code Playgroud)
'module'对象没有属性'write_dataframe'错误.
我正在使用下面的代码将csv文件转换为feather类型,
import pandas as pd
import feather
df = pd.read_csv('myfile.csv')
feather.write_dataframe(df, 'myfile.feather')
Run Code Online (Sandbox Code Playgroud)
myfile.csv结束了2G,当我运行代码时,我得到如下错误信息:
File "table.pxi", line 705, in pyarrow.lib.RecordBatch.from_pandas
File "table.pxi", line 739, in pyarrow.lib.RecordBatch.from_arrays
TypeError: Cannot convert pyarrow.lib.ChunkedArray to pyarrow.lib.Array
Run Code Online (Sandbox Code Playgroud)
我看过类似的问题,并发现feather最近开始支持超过2G的大文件.但我的羽毛版本是0.4,所以我认为我的一个已经能够支持大文件.为什么我会收到此错误?任何想法将不胜感激,谢谢.
我有一个数据框,让我们说:
import pandas as pd
df = pd.DataFrame({'a': [1, 4], 'b': [1, 3]})
Run Code Online (Sandbox Code Playgroud)
我想将它作为羽毛文件保存到 s3,但我找不到一种可行的方法来做到这一点。
有什么建议吗?
我正在处理CSV中的巨大数据集(5,000万行)。我试图对其进行切片并将其另存为羽毛格式,以便在稍后加载羽毛格式时节省一些内存。
作为一种解决方法,我将数据分块加载为CSV文件,然后将其合并到一个数据帧中。
到目前为止,这是我尝试过的:
df[2000000:4000000].to_feather('name')
Run Code Online (Sandbox Code Playgroud)
我遇到以下错误:
ValueError: feather does not support serializing a non-default index for the index; you can .reset_index() to make the index into column(s)
Run Code Online (Sandbox Code Playgroud)
然后,我尝试重置索引,但是仍然出现相同的错误。
我的工作流程通常涉及将一些数据(通常来自 CSV 文件)加载到 Pandas 数据框中,对其进行清理,定义每列的正确数据类型,然后将其导出到 SQL 服务器。
对于那些SQL 服务器不可用的情况,有什么好的替代方法可以存储已清理的数据和每列的数据类型的显式定义?
如何羽毛,HDF5,实木复合地板?Pandas支持它们,但我对这些格式知之甚少。我读过feather不建议长期存储(因为API可能会变?不清楚)
我不确定是否使用 pickle:我知道它不是一种安全格式,而且 API 不断变化并破坏向后兼容性
CSV 并不是一个真正的选择,因为在我的数据上推断数据类型通常是一场噩梦;将数据读回熊猫时,我需要明确声明格式,包括日期格式,否则:
更新:这是一个有趣的比较,据此 HDF5 是最快的格式:https : //medium.com/@bobhaffner/gist-to-medium-test-db3d51b8ba7b
我似乎明白 HDF5 和 Parquet 之间的另一个区别是 datetime64 在 HDF5 中没有直接等价物。大多数人似乎将他们的日期作为 ISO 日期格式 (yyyy-mm-dd) 字符串存储在 HDF5 中。
我正在探索 Python 的文件存储格式选项并偶然发现了羽毛。我注意到最后一个版本是在 2017 年,并且担心它的长期存在。
网络搜索正在撤回似乎都在 2017 年左右停止的帖子。
由于在Feather Github 中搜索问题,以及 stackoverflow 中的问题,例如Feather和 parquet 之间有什么区别?,由于Apache Arrow版本为 0.xx,不推荐 Feather 格式作为长期存储,并且由于不断发布新版本而被认为是不稳定的。
我的问题是,从当前的 Apache Arrow 版本 1.0.1 开始,这种情况是否有所改变?Feather 被认为可以稳定地用作长期存储吗?