这篇文章主要围绕从生成器创建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 列的子字符串比较两个 Dataframe
- pandas dataframe 与 spark dataframe 互相转换(数据类型应该怎么转换呢?)
- Pandas DataFrame使用另一个DataFrame列过滤行
- Pandas 基础(3) - 生成 Dataframe 的几种方式
从生成器创建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
我能够使用下面的方法获得所需的输出
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 互相转换(数据类型应该怎么转换呢?)
文章大纲
- 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列过滤行
我会做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的合并答案,但是代码更多,但也许更直接。
您只需:
- 合并该列并创建新的数据框
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) }
- 根据条件(在本例中为
s
),将数据名人 - 最后,将
s['col3'] >= s['col2']
传递给s
,结果将排除布尔系列df1
中返回False
的行:
s
更改为返回True
或False
的布尔系列。
s
Pandas 基础(3) - 生成 Dataframe 的几种方式
这一节想总结一下 生成 Dataframe 的几种方式:
- CSV
- Excel
- python dictionary
- List of tuples
- 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 的几种方式等相关知识,可以在本站进行查询。
本文标签: