GVKun编程网logo

从生成器创建pandas DataFrame?(pandas生成数据)

29

这篇文章主要围绕从生成器创建pandasDataFrame?和pandas生成数据展开,旨在为您提供一份详细的参考资料。我们将全面介绍从生成器创建pandasDataFrame?的优缺点,解答pand

这篇文章主要围绕从生成器创建pandas DataFrame?pandas生成数据展开,旨在为您提供一份详细的参考资料。我们将全面介绍从生成器创建pandas DataFrame?的优缺点,解答pandas生成数据的相关问题,同时也会为您带来Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、pandas dataframe 与 spark dataframe 互相转换(数据类型应该怎么转换呢?)、Pandas DataFrame使用另一个DataFrame列过滤行、Pandas 基础(3) - 生成 Dataframe 的几种方式的实用方法。

本文目录一览:

从生成器创建pandas DataFrame?(pandas生成数据)

从生成器创建pandas DataFrame?(pandas生成数据)

我创建了一个元组生成器,该元组生成器从仅过滤感兴趣记录的文件中提取信息,并将其转换为生成器返回的元组。

我尝试从创建数据框:

import pandas as pddf = pd.DataFrame.from_records(tuple_generator, columns = tuple_fields_name_list)

但是抛出一个错误:

... C:\Anaconda\envs\py33\lib\site-packages\pandas\core\frame.py in from_records(cls, data, index, exclude, columns, coerce_float, nrows)   1046                 values.append(row)   1047                 i += 1-> 1048                 if i >= nrows:   1049                     break   1050TypeError: unorderable types: int() >= NoneType()

我设法让它使用列表中的生成器,但是使用了两次内存:

df = pd.DataFrame.from_records(list(tuple_generator), columns = tuple_fields_name_list)

我要加载的文件很大,内存消耗很重要。我的计算机的最后一次尝试花了两个小时来尝试增加虚拟内存:(

问题: 有人知道直接从记录生成器创建DataFrame的方法,而无需事先将其转换为列表吗?

注意:我在Windows上将Python 3.3和pandas 0.12与Anaconda一起使用。

更新:

读取文件不是问题,我的元组生成器做得很好,它逐行扫描混合记录的文本压缩文件,仅将所需数据转换为正确的类型,然后以元组形式生成字段。某些数字可以在大约一分钟内且几乎不占用内存的情况下扫描130MB
gzip文件(约6.5GB未压缩)上的2111412记录。

Pandas
0.12不允许生成器,开发版本允许它,但是将所有生成器放在列表中,然后转换为框架。它效率不高,但必须在内部处理熊猫。同时,我必须考虑购买更多的内存。

答案1

小编典典

您无法使用0.12版本的熊猫从生成器创建DataFrame。您可以将自己更新为开发版本(从github获取并进行编译-
在Windows上有点痛苦,但我希望使用此选项)。

或者您也可以,因为您说过要过滤行,请先过滤它们,将它们写入文件,然后使用read_csv或其他方式加载它们。

如果您想变得超级复杂,可以创建一个类似于object的文件,该文件将返回以下行:

def gen():    lines = [        ''col1,col2\n'',        ''foo,bar\n'',        ''foo,baz\n'',        ''bar,baz\n''    ]    for line in lines:        yield lineclass Reader(object):    def __init__(self, g):        self.g = g    def read(self, n=0):        try:            return next(self.g)        except StopIteration:            return ''''

然后使用read_csv

>>> pd.read_csv(Reader(gen()))  col1 col20  foo  bar1  foo  baz2  bar  baz

Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe

我能够使用下面的方法获得所需的输出

df1.merge(df2,left_on = df2.prod_ref.str.extract(''(\d+)'',expand = False),right_on = df1.prod_id.str.extract(''(\d+)'',how = ''left'')

pandas dataframe 与 spark dataframe 互相转换(数据类型应该怎么转换呢?)

pandas dataframe 与 spark dataframe 互相转换(数据类型应该怎么转换呢?)

文章大纲

  • spark 2.x 版本
  • spark 3.2 版本及以上
  • 参考文献


spark 2.x 版本

spark 2.4.8 版本:

  • https://spark.apache.org/docs/2.4.8/api/python/_modules/pyspark/sql/dataframe.html#DataFrame.toPandas

源代码:

@since(1.3)
    def toPandas(self):
        """
        Returns the contents of this :class:`DataFrame

本文同步分享在 博客“shiter”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Pandas DataFrame使用另一个DataFrame列过滤行

Pandas DataFrame使用另一个DataFrame列过滤行

我会做merge

out = df1.merge(df2[['col1','col2']],on = 'col1',suffixes = ('','1')).query('col3>=col21').drop('col21',1)

out
Out[15]: 
  col1  col2  col3  col4
1    A     2  0.80   200
2    A     2  0.90   300
3    A     3  0.95   400
4    A     3  0.85   500
5    B     2  0.65   600
6    B     2  0.75   700
9    B     3  0.75  1000

reindex

out = df1[df1['col3'] >= df2.set_index('col1')['col2'].reindex(df1['col1']).values]
Out[19]: 
  col1  col2  col3  col4
1    A     2  0.80   200
2    A     2  0.90   300
3    A     3  0.95   400
4    A     3  0.85   500
5    B     2  0.65   600
6    B     2  0.75   700
9    B     3  0.75  1000

您还可以使用map

 df1.loc[df1.col3 >= df1.col1.map(df2.set_index("col1").col2)]
,

我的方法类似于@Ben_Yo的合并答案,但是代码更多,但也许更直接。

您只需:

  1. 合并该列并创建新的数据框 ZStack{ Rectangle() .frame(width: geometry.size.width,height: geometry.size.height/3.25) .shadow(radius: 5) .foregroundColor(Color.white) //Words ontop of the Rectangle VStack { HStack { Spacer() Text("Hello World") }.padding(.trailing,40) Spacer() //<-- PROBLEM HERE }//.offset(y: -40) }
  2. 根据条件(在本例中为s
  3. ),将数据名人s更改为返回TrueFalse的布尔系列。
  4. 最后,将s['col3'] >= s['col2']传递给s,结果将排除布尔系列df1中返回False的行:

s

Pandas 基础(3) - 生成 Dataframe 的几种方式

Pandas 基础(3) - 生成 Dataframe 的几种方式

这一节想总结一下 生成 Dataframe 的几种方式:

  1. CSV
  2. Excel
  3. python dictionary
  4. List of tuples
  5. List of dictionary

下面分别一一介绍具体的实现方式:

  • 通过 csv 文件
    这里补充一个知识点, 就是如果要读取的文件不在 jupyter 所在的文件夹, 则可以通过绝对路径的方式引入.
df = pd.read_csv("/Users/rachel/Downloads/weather.csv") 
  • 通过 Excel 文件
    这里的第二个参数是必填项, 因为要指明具体读取 excel 表中的哪个 sheet.
df = pd.read_excel("/Users/rachel/Downloads/weather.xlsx", "weather") 

还有一个小坑, 就是在初次运行的时候有可能会提示错误, 根据错误提示, 大概可以了解到, 要读取 excel 文件, 还需要一个 xlrd 的包, 在终端运行下面命令就好了

pip3 install xlrd
  • 通过 python dictionary (为了方便大家日后可以更好地理解英文文档, 这里的一些专业名词, 我就都不翻译了)
weather_data = {
    ''day'': [''1/1/2017'',''1/2/2017'',''1/3/2017''], ''temperature'': [32,35,28], ''windspeed'': [6,7,2], ''event'': [''Rain'', ''Sunny'', ''Snow''] } df = pd.DataFrame(weather_data) 
  • 通过 List of tuples
weather_data = [
    (''1/1/2017'',32,6,''Rain''), (''1/2/2017'',35,7,''Sunny''), (''1/3/2017'',28,2,''Snow'') ] df = pd.DataFrame(data=weather_data, columns=[''day'',''temperature'',''windspeed'',''event'']) 

上面例子中, weather_data 的数据结构是一个 list(特点是中括号), list 中的每一个元素就是一个 tuple, 由于原数据没有指明列名, 所以在创建 dataframe 的时候, 需要指明列名.

  • 通过 List of dictionary, 从名字就可以读出来下面的数据结构是一个 list, list 中的每个元素又是一个 dictionary.
weather_data = [
    {''day'': ''1/1/2017'', ''temperature'': 32, ''windspeed'': 6, ''event'': ''Rain''}, {''day'': ''1/2/2017'', ''temperature'': 35, ''windspeed'': 7, ''event'': ''Sunny''}, {''day'': ''1/3/2017'', ''temperature'': 28, ''windspeed'': 2, ''event'': ''Snow''}, ] df = pd.DataFrame(data=weather_data, columns=[''day'',''temperature'',''windspeed'',''event'']) 

上面简要介绍了 5 中生成 dataframe 的方式, 其实 Pandas 还支持很多种文件格式的输入输出, 具体可以参考下官方文档 https://pandas.pydata.org/pandas-docs/version/0.22/io.html

有任何问题或意见, 欢迎留言交流哦~~~

原文出处:https://www.cnblogs.com/rachelross/p/10405841.html

今天关于从生成器创建pandas DataFrame?pandas生成数据的分享就到这里,希望大家有所收获,若想了解更多关于Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、pandas dataframe 与 spark dataframe 互相转换(数据类型应该怎么转换呢?)、Pandas DataFrame使用另一个DataFrame列过滤行、Pandas 基础(3) - 生成 Dataframe 的几种方式等相关知识,可以在本站进行查询。

本文标签: