首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >pandas.Dataframe等效于Pandas.read_csv转换器?

pandas.Dataframe等效于Pandas.read_csv转换器?
EN

Stack Overflow用户
提问于 2021-08-25 01:41:29
回答 1查看 151关注 0票数 0

这个discussion涵盖了dtypesconverterspandas.read_csv函数中的区别。

我在文档中找不到与pandas.DataFrame构造函数等效的转换器。

如果我直接从列表中构建数据,那么模仿相同行为的最佳方法是什么?

一些虚构的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# data.csv

sport,population
football,15M
darts,50k
sailing,3000
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# convert_csv_to_df.py

import pandas as pd

def f_population_to_int(population):
    dict_multiplier={"k": 1000, "M": 1000000}
    try:
         multiplier = dict_multiplier[population[-1]]
         return int(population[0:-1]) * multiplier
    except KeyError:
         return population

dict_converters = {"population": f_population_to_int}
df = pd.read_csv("data.csv", converters=dict_converters)

产出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      sport population 
0  football   15000000 
1     darts      50000 
2   sailing       3000 

从列表中获取相同数据的最佳方法是什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = [["sports", "population"], ["football", "15M"], ["darts", "50k"], ["sailing", 3000]]

编辑以求澄清:

示例dict_converter只包含一个函数,但其思想是能够对多个列应用不同的转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 01:47:13

更改f_population_to_int函数以返回相同的值,如果有任何错误(删除KeyError),并在创建DataFrame之后使用Series.apply

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = [["sports", "population"], ["football", "15M"], ["darts", "50k"], ["sailing", 3000]]


def f_population_to_int(population):
    dict_multiplier={"k": 1000, "M": 1000000}
    try:
         multiplier = dict_multiplier[population[-1]]
         return int(population[0:-1]) * multiplier
    except:
         return population

df = pd.DataFrame(data[1:], columns=data[0])
df['population'] = df['population'].apply(f_population_to_int)

print (df)
     sports population
0  football   15000000
1     darts      50000
2   sailing       3000

如果需要,可以使用dict dict_converters

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dict_converters = {"population": f_population_to_int}
for k, v in dict_converters.items():
    df[k] = df[k].apply(v)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68920479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文