python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?相关的知识,希望对你有一定的参考价值。

如图,excel读取进来后发现high和weight这两列数据并不是数字类型而是字符串类型,如何把他们转换为数值并筛选出体重小于70的人,并把这些人从最轻到最重升序排列后导出一个新的excel。

import pandas as pd
# 读取表格
df = pd.read_excel("old.xlsx")
# 强制转换high和weight两列为浮点类型
df[['high','weight']] = df[['high','weight']].astype('float')
# 打印一下看看数据类型是否正确,应为float64
print(df.info())
# 筛选出体重小于70的数据
df = df[df['weight'] < 70.0]
# 将这些数据升序排列
df = df.sort_values(by='weight', ascending=True)
# 最后导出为新的表格
df.to_excel('new.xlsx', encoding='utf8')

参考技术A 对字符串使用float函数进行转换就好了。s='65.3' m=float(s)追问

那怎么把整列都转换呢

追答

只能是逐个转换,如果你取出的数据是保存在数组的,就对数组每个元素进行转换

参考技术B import pandas as pd
pd.read_excel("d:/test.xlsx",dtype='high':int,'weight':float).query('wight<70').to_excel('d:/result.xlsx',index=0)

如何将 Parquet 文件读入 Pandas DataFrame?

【中文标题】如何将 Parquet 文件读入 Pandas DataFrame?【英文标题】:How to read a Parquet file into Pandas DataFrame? 【发布时间】:2016-02-22 04:21:04 【问题描述】:

如何在不设置集群计算基础架构(如 Hadoop 或 Spark)的情况下将中等大小的 Parquet 数据集读入内存中的 Pandas DataFrame?这只是我想在笔记本电脑上使用简单的 Python 脚本在内存中读取的适量数据。数据不驻留在 HDFS 上。它要么在本地文件系统上,要么在 S3 中。我不想启动和配置其他服务,例如 Hadoop、Hive 或 Spark。

我认为 Blaze/Odo 会让这成为可能:Odo 文档提到 Parquet,但这些示例似乎都通过外部 Hive 运行时进行。

【问题讨论】:

您是否碰巧公开了数据?我的 python-parquet 分支github.com/martindurant/parquet-python/tree/py3 在 parquet.rparquet 中有一个 pandas 阅读器,你可以试试。它无法处理许多镶木地板结构。 等待 Pandas 作者 Wes Mckinney 参与的 Apache Arrow 项目。 wesmckinney.com/blog/pandas-and-apache-arrow 完成后,用户应该可以直接从 Pandas 读取 Parquet 文件了。 由于问题已作为题外话关闭(但仍然是 Google 上的第一个结果),我必须在评论中回答。您现在可以使用 pyarrow 读取镶木地板文件并将其转换为熊猫数据框:import pyarrow.parquet as pq; df = pq.read_table('dataset.parq').to_pandas() 有点恼火这个问题被关闭了。 Spark 和 parquet 的文档(仍然)相对较差。我也在寻找这个问题的答案。 fastparquet 和 pyarrow 库都可以将 parquet 文件读入 pandas 数据帧:github.com/dask/fastparquet 和 arrow.apache.org/docs/python/parquet.html 【参考方案1】:

更新:自从我回答这个问题以来,已经在 Apache Arrow 上进行了大量工作,以便更好地读取和写入镶木地板。另外:http://wesmckinney.com/blog/python-parquet-multithreading/

有一个 python parquet reader 比较好用:https://github.com/jcrobak/parquet-python

它将创建 python 对象,然后您必须将它们移动到 Pandas DataFrame,因此该过程将比 pd.read_csv 慢。

【讨论】:

实际上有允许读/写的pyarrow:pyarrow.readthedocs.io/en/latest/parquet.html 当我尝试点击你的链接时,我收到一个权限被拒绝错误,@bluszcz -- 你有替代品吗? parquet-python 比 fastparquet et pyarrow 等替代方案慢得多:arrow.apache.org/docs/python/parquet.html pd.read_parquet 现在是 pandas 的一部分。另一个答案应标记为有效。【参考方案2】:

pandas 0.21 引入new functions for Parquet:

pd.read_parquet('example_pa.parquet', engine='pyarrow')

pd.read_parquet('example_fp.parquet', engine='fastparquet')

以上链接说明:

这些引擎非常相似,应该读/写几乎相同的 parquet 格式文件。这些库的不同之处在于具有不同的底层依赖项(fastparquet 使用 numba,而 pyarrow 使用 c 库)。

【讨论】:

对于我的大部分数据,“fastparquet”要快一些。以防 pd.read_parquet() 返回 Snappy 错误问题,运行 conda install python-snappy 安装 snappy。 我发现 pyarrow 太难安装(在我的本地 windows 机器和云 linux 机器上)。即使在 python-snappy 修复之后,编译器也存在其他问题,并且错误模块“pyarrow”没有属性“compat”。 fastparquet 完全没有问题。 @Catbuilts 如果没有 snappy,可以使用 gzip。 'fastparquet' 可以读取 ',snappy.parquet' 文件吗? 我与@Seb 有相反的经历。 fastparquet 有很多问题,pyarrow 是简单的 pip 安装,然后我就走了【参考方案3】:

除了 pandas,Apache pyarrow 还提供了将 parquet 转换为数据帧的方法

代码很简单,只需输入:

import pyarrow.parquet as pq

df = pq.read_table(source=your_file_path).to_pandas()

有关更多信息,请参阅来自 Apache pyarrow Reading and Writing Single Files 的文档

【讨论】:

【参考方案4】:

Parquet 文件总是很大。所以请使用 dask 阅读。

import dask.dataframe as dd
from dask import delayed
from fastparquet import ParquetFile
import glob

files = glob.glob('data/*.parquet')

@delayed
def load_chunk(path):
    return ParquetFile(path).to_pandas()

df = dd.from_delayed([load_chunk(f) for f in files])

df.compute()

【讨论】:

【参考方案5】:

写入 parquet 时,请考虑使用 brotli 压缩。通过使用 brotli 压缩,我将 8GB 文件 parquet 文件的大小减少了 70%。与 gzip、snappy、pickle 相比,Brotli 的文件更小,读/写速度更快。虽然 pickle 可以做元组,而 parquet 不能。

df.to_parquet('df.parquet.brotli',compression='brotli')
df = pd.read_parquet('df.parquet.brotli')

【讨论】:

【参考方案6】:

考虑到名为data.parquet 文件

parquet_file = '../data.parquet'

open( parquet_file, 'w+' )

然后使用pandas.to_parquet(此函数需要fastparquet 或pyarrow 库)

parquet_df.to_parquet(parquet_file)

然后,使用pandas.read_parquet() 获取数据帧

new_parquet_df = pd.read_parquet(parquet_file)

【讨论】:

【参考方案7】:

镶木地板

第 1 步:要使用的数据

df = pd.DataFrame(
    'student': ['personA007', 'personB', 'x', 'personD', 'personE'],
    'marks': [20,10,22,21,22],
)

第 2 步:另存为 Parquet

df.to_parquet('sample.parquet')

第 3 步:从 Parquet 读取

df = pd.read_parquet('sample.parquet')

【讨论】:

以上是关于python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?的主要内容,如果未能解决你的问题,请参考以下文章

Python/Pandas:如何将字符串列表与 DataFrame 列匹配

Python Pandas Dataframe:如何同时将多个索引附加到列表中?

如何将 Python 列表转换为 pandas DataFrame :

如何将 Python 字典附加到 Pandas DataFrame,将键与列名匹配

如何将“字节”对象转换为 Pandas Dataframe、Python3.x 中的文字字符串?

InstagramAPI - 如何将 JSON Python 数据解析为 Pandas DataFrame(iPython、Jupyter Notebook)