一些有用的pandas代码片段

# 列出dataframe指定列的唯一值
df['Column Name'].unique()

# 把列的数据类型转换为数字。如果有非数字值,则会出错。
pd.to_numeric(df['Column Name'])

# 把列的数据类型转换为数字,如果非数字值,则会转换为NaN
pd.to_numeric(df['Column Name'], errors='coerce')

# 获取DataFrame列中有特定值的行
valuelist = ['value1', 'value2', 'value3']
df = df[df.column.isin(valuelist)]

# 获取DataFrame列中没有特定值的行
valuelist = ['value1', 'value2', 'value3']
df = df[~df.column.isin(value_list)]

# 删除DataFrame的列
del df['column']

# dataframe多列条件查询
# (使用`|`替换 `&`做OR条件)
newdf = df[(df['column_one']>2004) & (df['column_two']==9)]

# DataFrame重命名多列
df = df.rename(columns = {
    'col1 old name':'col1 new name',
    'col2 old name':'col2 new name',
    'col3 old name':'col3 new name',
})

# 把DataFrame的所有列名转换为小写字母
df.columns = map(str.lower, df.columns)

# 重命名列名,并且转换为小写
df.rename(columns=lambda x: x.split('.')[-1], inplace=True)

# DataFrame行迭代
for index, row in df.iterrows():
    print index, row['some column']

# 相对快速的迭代DataFrame每一行
for row in df.itertuples():
    print(row)

# 下面的例子演示了pandas文本数据的使用。
# .str函数完整的列表查看: http://pandas.pydata.org/pandas-docs/stable/text.html

# 对DataFrame的值分片
df.column.str[0:2]

# 对DataFrame的列转换为小写
df.column_name = df.column_name.str.lower()

#列数据的长度
df.column_name.str.len()

# 按多列排序
df = df.sort_values(['col1','col2','col3'],ascending=[1,1,0])

# dataframe排序,分组,然后取每组的前几个。
top5 = df.groupby(['groupingcol1', 'groupingcol2']).head(5)

# 获取DataFrame为null的行
newdf = df[df['column'].isnull()]

# 多层多键查询
df.xs(('index level 1 value','index level 2 value'), level=('level 1','level 2'))

# 把NaN改为None
df = df.where((pd.notnull(df)), None)

# More pre-db insert cleanup...make a pass through the dataframe, stripping whitespace
# from strings and changing any empty values to None
df = df.applymap(lambda x: str(x).strip() if len(str(x).strip()) else None)

# 快速统计DataFrame的行数
len(df.index)

# 透视数据 Pandas >= .14
pd.pivot_table(
  df,values='cell_value',
  index=['col1', 'col2', 'col3'], #these stay as columns; will fail silently if any of these cols have null values
  columns=['col4']) #data values in this column become their own column

# 修改DataFrame列的数据类型
df.column_name = df.column_name.astype(np.int64)

# 替换整个DataFrame里的非数字值:
for col in refunds.columns.values:
  refunds[col] = refunds[col].replace('[^0-9]+.-', '', regex=True)

# 根据其他列值设置DataFrame的列值
df.loc[(df['column1'] == some_value) & (df['column2'] == some_other_value), ['column_to_change']] = new_value

# 清除DataFrame多列的缺失值
df = df.fillna({
    'col1': 'missing',
    'col2': '99.999',
    'col3': '999',
    'col4': 'missing',
    'col5': 'missing',
    'col6': '99'
})

# 将DataFrame的两列连接为新列
df['newcol'] = df['col1'].astype(str) + df['col2'].astype(str)

# 使用缺失值得列做计算
# 下面的例子,把df ['col1']null的值替换为0
df['new_col'] = np.where(pd.isnull(df['col1']),0,df['col1']) + df['col2']

# 把DataFrame的列的值分为两列
df['new_col1'], df['new_col2'] = zip(*df['original_col'].apply(lambda x: x.split(': ', 1)))

# 
df.columns = df.columns.get_level_values(0)

# 转换Django的queryset为DataFrame
qs = DjangoModelName.objects.all()
q = qs.values()
df = pd.DataFrame.from_records(q)

# 根据Python的字典新建DataFrame
df = pd.DataFrame(list(a_dictionary.items()), columns = ['column1', 'column2'])

# 查询dataframe里指定列里重复记录
dupes = df[df.duplicated(['col1', 'col2', 'col3'], keep=False)]

# 为了避免大数不以科学记数法显示,设置格式:
pd.set_option('display.float_format', lambda x: '%.3f' % x)
# 以逗号,小数点显示
pd.options.display.float_format = '{:,.0f}'.format

摘自:https://gist.github.com/bsweger/e5817488d161f37dcbd2

版权声明:著作权归作者所有。

相关推荐

Git同步主仓库的代码到fork仓库

首先需要添加主仓库为本地的远程仓库。配置远程仓库1、在本地项目的目录下,查看已配置的远程仓库$git remote -v origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) origin  https://github.com/YOUR_USERNAME/

Pandas对应SQL的in和not in实现

在Pandas提供了pd.isin(),使用它可以实现SQL的in和not in。not in 对应于:~a.isin(b) 示例:假如有以下dataframe数据,它包含了列data如下:>>> df   data 0   a 1   b 2 &nb

有用的Kotlin版Rx代码片段1

只是几个随机的,可能有用的Rx片段(kotlin版)。计时器是的,只是一个简单的计时器,运行5秒。Observable.interval(1, TimeUnit.SECONDS, Schedulers.newThread())         .take(5)    &

[译]代码优先的Java 9模块系统教程(二)

服务监控(ServiceMonitor)让我们来想象一个提供娱乐服务的网络,可能是社交网络或者是视频网络。我们希望监控这些服务,以确定系统的健康状况,并且在发生问题时能够发现,而不是客户报告。 这就是ServiceMonitor示例程序所要做的:监视这些服务(另一个惊喜)。幸运的是,服务已经收集了我们想要的数据,ServiceMonitor所需要做的就是定期查询。 不幸的是,并

[译]代码优先的Java 9模块系统教程(一)

Java平台模块系统(JPMS)将模块化带入Java和JVM,并改变了我们在大型应用中的编程方式。 为了充分利用它,我们需要很好地了解,第一步是学习基础知识。 在本教程中,我首先向你展示一个简单的Hello World示例,然后我们用Java 9将一个现有的demo程序模块化。我们将创建模块声明(module-info。java),使用模块路径来编译,打包,以及运行程序——先代