例如,我有简单的DF:
import pandas as pd
from random import randint
df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
'B': [randint(1, 9)*10 for x in xrange(10)],
'C': [randint(1, 9)*100 for x in xrange(10)]})
Run Code Online (Sandbox Code Playgroud)
我可以使用Pandas的方法和习语从"A"中选择"B"的相应值大于50,"C" - 不等于900的值吗?
在我看来,子集和过滤器(来自dplyr)具有相同的结果.但我的问题是:在某些方面存在潜在的差异,例如.速度,它可以处理的数据大小等?是否有时候使用其中一种更好?
例:
library(dplyr)
df1<-subset(airquality, Temp>80 & Month > 5)
df2<-filter(airquality, Temp>80 & Month > 5)
summary(df1$Ozone)
# Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
# 9.00 39.00 64.00 64.51 84.00 168.00 14
summary(df2$Ozone)
# Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
# 9.00 39.00 64.00 64.51 84.00 168.00 14
Run Code Online (Sandbox Code Playgroud) 我的问题受到之前关于此主题的SO 的启发:在 Amazon Web Services (AWS) S3 中将 DataFrames 上传和保存为 csv 文件。使用 Python3,我想使用s3.upload_fileobj-分段上传 - 使数据传输到 S3 的速度更快。当我在接受的答案中运行代码时,我收到一条错误消息:“TypeError:需要一个类似字节的对象,而不是‘str’”。.
答案最近已被多次投票。所以我认为必须有一种方法可以在 Python3 中运行这段代码而不会出错。
请在代码下方找到。让我们轻松使用一个简单的 DataFrame。实际上,这个 DataFrame 更大(大约 500 MB)。
import pandas as pd
import io
df = pd.DataFrame({'A':[1,2,3], 'B':[6,7,8]})
Run Code Online (Sandbox Code Playgroud)
代码如下。为了方便起见,我将其转为函数:
def upload_file(dataframe, bucket, key):
"""dat=DataFrame, bucket=bucket name in AWS S3, key=key name in AWS S3"""
s3 = boto3.client('s3')
csv_buffer = io.BytesIO()
dataframe.to_csv(csv_buffer, compression='gzip')
s3.upload_fileobj(csv_buffer, bucket, key)
upload_file(df, your-bucket, your-key)
Run Code Online (Sandbox Code Playgroud)
非常感谢您的建议!