熊猫的推进概念

Tavish Aggarwal.
E

当然是arlier python北京快3app科学包,我有熊猫包的基础知识。在这里,我将覆盖一些先进的概念,熊猫必须提供。

我将在此帖子中涵盖的概念列表:

  1. 从列表中创建北京快3app集
  2. 使用熊猫的绘图功能
  3. 熊猫与时间序列
  4. 在熊猫的索引重新筛选
  5. 重新采样北京快3app
  6. 链接和过滤
  7. 分组北京快3app
  8. 转换北京快3app
    1. 使用应用和变换功能
    2. 使用过滤器和地图操作

展示我们所采取的例子 TMDB 5000电影 dataset from Kaggle.

在我们潜入理解上述概念之前,让我们了解Numpy库如何与Python一起使用。以下是展示Pandas如何与Numpy互操作的示例。

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')
print(tmdbDataSet.values)
print(type(tmdbDataSet.values)) # numpy.ndarray

我们将更多地了解Pandas如何在这篇文章中与Numpy互操作。

从列表中创建北京快3app集

我们也可以从列表中生成一个熊猫北京快3app集。让我们来看看如何从列表中创建北京快3app集的示例。

import pandas as pd

index = ['Name', 'Salary', 'Age']
details = [['Ashok', 'Mike', 'Arun'], [1200, 1400, 2500], [23, 28, 30]]
zippedList = list(zip(index, details))
dictObject = dict(zippedList)
df = pd.DataFrame(dictObject)
print(df)

我们还可以更新北京快3app列的标签。更新标签请参阅以下代码:

# Let's rename the column of the dataset which we have generated from the list

df = pd.DataFrame(dictObject)

list_labels = ['Age(In Years)', 'Name', 'Salary (In $)']
df.columns = list_labels
print(df)

我们还可以在使用北京快3app集时更改列的标题 名称 argument.

import pandas as pd

tmdbDataSet_sub = pd.read_csv('tmdb_5000_movies.csv', header=0, 
names=['budget', 'genres', 'home_page', 'id', 'keywords', 'original_language',
       'original_title', 'overview', 'popularity', 'production_companies',
       'production_countries', 'release_date', 'revenue', 'runtime',
       'spoken_languages', 'movie_status', 'tagline', 'title', 'vote_average',
       'vote_count'], comment='#')
print(tmdbDataSet_sub.head())

笔记:我们必须通过 标题 论点也和 名称 命名为重命名列标签。

评论参数将忽略在这种情况下具有'#'符号的文件中的行。

读取文件后,我们可以将文件导出到CSV或Excel。此外,我们可以指定我们是否需要将索引导出到文件。

tmdbDataSet.to_csv('tmdb_movies.csv', index=False)

tmdbDataSet.to_excel('tmdb_movies.xlsx', index=False)

使用熊猫的绘图功能

Pandas通过与Matplotlib库互操作提供北京快3app可视化。我们可以使用.plot函数绘制北京快3app集的所有列。让我们看看下面显示的示例:

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

tmdbDataSet.plot()
plt.show()

使用上面的代码,我们可以将所有列绘制到相同的图表。但输出看起来有点笨拙,并且如果我们正在绘制的列有不同的测量值,很难理解。让我们看看图表中的替代方法来绘制列:

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

tmdbDataSet.plot(subplots=True)
plt.show()

您本来已经注意到这次我们将传递子图参数传递给绘图函数。它会在不同的图表中绘制所有列,因此可以轻松理解。

我们还可以从DataSet绘制所选列。

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

columnList = ['vote_count','budget']
tmdbDataSet[columnList].plot(subplots=True)
plt.show()

从上图的输出,一件事要观察到Pandas Plot功能如何将北京快3app帧的索引值置于X轴。现在我们可以看到我们如何手动将任何值设置为x轴。

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

tmdbDataSet.plot(x='production_companies', y=['budget'])
plt.show()

我们甚至可以使用Pandas Plot函数生成盒绘图或散点图。 

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

cols = ['vote_count','budget']

tmdbDataSet[cols].plot(kind='box', subplots=True)

plt.show()

tmdbDataSet.plot(kind='scatter', x='budget', y='vote_count', s=tmdbDataSet.popularity)
plt.show()

散点图是接受参数s的绘图中每个圆的大小。

我们还可以使用熊猫绘制直方图图。直方图绘图描绘了PDF(概率分布函数)。它的输出向我们展示了我们在X轴上绘制的值的发生概率。

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

tmdbDataSet.plot(kind='hist', y='vote_average')
plt.show()

有一个叫做累积的参数,我们可以通过判断直方图是否绘制PDF或CDF。 (累积分布函数)

CDF图的输出描绘了在X轴处绘制的值的概率。

import pandas as pd
import matplotlib.pyplot as plt

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

tmdbDataSet.plot(kind='hist', y='vote_average', normed=True)
plt.show()


# Observations
# The output depicts probability of having different vote_averages

笔记: 我们可以使用以下代码绘制不同行和列的图表:

figure, axes = plt.subplots(nrows=2, ncols=1)

tmdbDataSet.plot(ax=axes[0], kind='hist', y='vote_average')
tmdbDataSet.plot(ax=axes[1], kind='hist', y='vote_average', normed=True, 
cumulative=True)

plt.show()

# Observations
# Here 1st curve plotted is PDF as we have seen earlier.
# And 2nd second plot plotted is CDF.

在这里,我们已声明轴,然后我们可以使用AX参数将各种图形绘制为一个。

熊猫与时间序列

如果我们北京快3app集中有日期列,我们希望将其创建为索引,Pandas提供index_col和parse_dates参数来执行此操作。

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv', index_col='release_date', parse_dates=True)

print(tmdbDataSet.head())
print(tmdbDataSet.loc['2010-Aug-01'])
print(tmdbDataSet.loc['2010-01-01 21:00:00':'2010-05-11 22:00:00'])

解析日期列并将其作为索引的优势是我们可以根据日期过滤结果。作为一个例子,我们在2010年8月1日之前过滤结果。

此外,我们可以利用LOC功能检查日期范围之间的行。

我们还可以在列表中格式化日期列。 Pandas提供to_datetime函数来执行此操作。

import pandas as pd

print(pd.to_datetime(['2010-01-01 21:00:00','2010-05-11 22:00:00'], format='%Y-%m-%d %H:%M'))

用时间序列列绘制图表

在调用绘图功能时,如果我们有索引作为日期列,Pandas将自动调整绘制的图表。 

import pandas as pd

tmdbDataSet_date_index = pd.read_csv('tmdb_5000_movies.csv', index_col='release_date', 
                                           parse_dates=True)

tmdbDataSet_date_index.vote_count.plot()
plt.show()

在熊猫的索引重新筛选

当我们组合多个北京快3app集时,需要将北京快3app集进行重新绑定。 reindex我们还可以指定Panadas,我们如何使用“方法”参数来填充索引来reindex函数。

# Without using any fill technique
dataSet = dataSet2.reindex(dataSet1.index)

# Using forward fill
dataSet = dataSet2.reindex(dataSet1.index, method="ffill")

# Using backward fill
dataSet = dataSet2.reindex(dataSet1.index, method="bfill")

索引是不可变的。我们无法更新北京快3app集的索引。如果我们尝试执行以下命令,我们将收到错误:

tmdbDataSet.index[0] = 24654

# Output
# TypeError: Index does not support mutable operations

有一种替代方法,我们可以更新整个北京快3app集的索引:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

tmdbDataSet.index = [x * 2 for x in range(0, 4803)] # Using comprehension list

上面的代码将成功地执行,因为TMDBDATASET北京快3app集具有4803行,我们正在更新所有行的索引。

我们还可以使用下面显示的命令给出一个名称索引:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

print(tmdbDataSet.index.name) # None

tmdbDataSet.index.name = 'movie_index'
print(tmdbDataSet.index.name) # movie_index

分层索引

我们甚至可以在北京快3app集上声明分层索引。分层索引意味着给定北京快3app集上的多个索引。

要在北京快3app集上设置多个索引,我们需要使用set_index函数。我们可以对使用sort_index函数创建的索引进行排序,如下所示:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

# Adding index on release_date and homepage column
tmdbDataSet_multi_index = tmdbDataSet.set_index(['release_date', 'status'])

# Sorting the index columns
tmdbDataSet_multi_index = tmdbDataSet_multi_index.sort_index()

添加多个索引的好处是我们可以轻松地将北京快3app切片。让我们看一下如下所示的示例:

# To get list of all movies released on 1916-09-04
print(tmdbDataSet_multi_index.loc[('1916-09-04','Released')])

# To get list of all movies released on 1916-09-04 and 2010-03-03
print(tmdbDataSet_multi_index.loc[(['1916-09-04', '2010-03-03'],'Released'), :])

# To get list of all rumored movies
print(tmdbDataSet_multi_index.loc[(slice(None), 'Rumored'), :])

笔记: 在创建分层索引或多个索引时,我们需要注意索引顺序。在上面显示的示例中,如果我们需要在第二个索引中的传闻电影列表,我们仍需要通过上面所示的第一个索引。为此,我们需要使用切片(无)。

我们还可以在我们的北京快3app集中交换索引。并且还可以将北京快3app集的索引重置为原始。

# swapping index of multilevel index
tmdbDataSet_multi_index_swap = tmdbDataSet_multi_index.swaplevel(0,1)
print(tmdbDataSet_multi_index_swap.head())

# Resetting Index
tmdbDataSet_original = tmdbDataSet_multi_index_swap.reset_index()
print(tmdbDataSet_original.head())

如果我们的北京快3app集有多个索引,则无法迁移北京快3app集。但我们可以在堆叠或取消粘连北京快3app集后枢转。我们将在未来的帖子中了解更多信息。

重新采样北京快3app

我们还可以在Pandas中重新取自我们的北京快3app集。重新采样意味着,使用静态方法计算结果。有两种类型的抽样:

下采样:根据条件减少我们北京快3app集中的行。例如:考虑您的北京快3app集每天记录湿度。您可以将DataPlipple DataSet倒置,每月记录湿度。在这里,您正在减少北京快3app集中的行数。

import pandas as pd

tmdbDataSet_dateIndex = pd.read_csv('./Cleaning Data/tmdb_5000_movies.csv', 
                                    parse_dates=True, index_col='release_date')

print(tmdbDataSet_date_index.resample('A').sum()) # Down sampling data yearly

print(tmdbDataSet_date_index.resample('A').sum().count()) 
# Down sampling data yearly with chaining

ups采样: 基于条件增加北京快3app集中的行。例如:再次考虑每天记录湿度的北京快3app集。您可以将北京快3app集推向每小时。在这里,您正在增加北京快3app集中的行数。

笔记: 始终建议使用采样,以某种统计方法,如平均值,计数,总和等。

import pandas as pd

tmdbDataSet_dateIndex = pd.read_csv('./Cleaning Data/tmdb_5000_movies.csv', 
                                    parse_dates=True, index_col='release_date')

print(tmdbDataSet_date_index.resample('H').sum()) # up sampling data hourly
print(tmdbDataSet_date_index.resample('4H').sum()) # up sampling data every 4 hours

链接和过滤

使用Pandas,而重新采样/过滤北京快3app我们还可以链接方法并获得所需的结果。考虑下面显示的示例:

import pandas as pd

tmdbDataSet_dateIndex = pd.read_csv('./Cleaning Data/tmdb_5000_movies.csv', 
                                    parse_dates=True, index_col='release_date')

# Down sampling data yearly with chaining
print(tmdbDataSet_date_index.resample('A').sum().count()) 

分组北京快3app

Pandas提供了使用我们还可以对我们的北京快3app集进行组的GroupBy函数。我们可以使用GroupBy函数进行多个操作,例如选用特定列,由多个列分组,执行多个聚合和更多。考虑下面显示的示例:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

# Count of dataset on each day
print(tmdbDataSet.groupby('release_date').count())

# Sum of budget made on each day by 5000 movies
print(tmdbDataSet.groupby('release_date')['budget'].sum())

# Grouping by the mutiple columns and selecting certain columns
print(tmdbDataSet.groupby(['release_date', 'runtime'])[['popularity', 'budget']].sum())

# Multiple aggregations
print(tmdbDataSet.groupby(['release_date', 'runtime'])[['popularity', 'budget']]
.agg(['sum', 'count']))

转换北京快3app

我们甚至可以根据我们想要的所需输出转换我们的北京快3app集。我们可以使用划分的划分转换北京快3app,使用熊猫将字符串转换为大写等。让我们看看下面显示的示例:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

# Divide vote_average by 2
print(tmdbDataSet.vote_average.floordiv(2))

# Convert column to upper case
print(tmdbDataSet.status.str.upper()) 

# Drop column from the dataset
tmdbDataSet_dropped = tmdbDataSet.drop(['production_countries'], axis='columns')
print(tmdbDataSet_dropped.head())

要对北京快3app集执行高级级别转换,我们可以使用应用程序和变换功能。下面是描述变换的示例   and apply function:

使用变换功能

我们可以使用Transform函数转换北京快3app集。让我们来看看一个榜样来以更好的方式了解变换函数:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

grouped_dataset = tmdbDataSet.groupby(['original_language'])

def find_en_lang(series):
    if series.values[0] == 'en':
        return 'english'
    else:
        return 'non-english'

tmdbDataSet.loc[:,'original_language_en'] = grouped_dataset.original_language.transform(
    find_en_lang)
display(tmdbDataSet.head())

在上面显示的示例中,我们正在操纵原始_language列,我们正在使用值“英语”或“非英语”的北京快3app集中创建新列。

使用应用功能

我们使用应用功能来迭代Pandas系列。非常类似于转换功能,我们可以应用任何将导致北京快3app转换的功能。让我们来看看一个榜样,以更好的方式了解应用程序:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

## Converting runtime to hours
tmdbDataSet.loc[:,'runtime_hours'] = tmdbDataSet.apply(lambda x:x['runtime']/60, axis=1)
display(tmdbDataSet.head())

在上面所示的示例中,我们正在转换电影的运行时间,即在几分钟到几小时。此外,我们正在使用lambda函数来这样做。

变换与应用之间的差异 功能

转换和应用功能之间的关键差异是:

  1. 应用功能将每个组作为北京快3app帧传递给自定义函数的所有列,而变换将每个组传递每个组作为自定义函数的系列。
  2. 传递给应用的自定义函数可以返回标量或一系列或dataframe。传输到变换的自定义函数必须返回与组相同的序列(一维系列,阵列或列表)。

使用过滤功能

我们还可以过滤唐效果,并可以在过滤结果上执行转换。让我们看看下面显示的一个例子并了解它:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

grouped_dataset = tmdbDataSet.groupby(['original_language'])

# Movies whose budget is greater than 25cr
display(grouped_dataset.filter(lambda x: x['budget'].sum() > 250000000))

在下面显示的示例中,我们正在基于语言过滤结果。我们只想要其特定原因_language的预算总和的结果超过25cr。

使用地图功能

到目前为止,我们已经看到了在北京快3app集的列上执行的GroupBy操作。如果我们想根据自己的状况执行GroupBy,该怎么办?我们可以在这样的场景中使用Map函数。考虑下面显示的示例:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

language = (tmdbDataSet['original_language'] == 'en').map({True:'English', 
                                                           False:'Non-English'})
display(tmdbDataSet.groupby(language)['budget', 'original_language'].mean())

在上面所示的示例中,我们正在基于自己的条件执行GroupBy。我们正在将北京快3app集分组为“英语”或“非英语”组。

聚合北京快3app集

基于多种措施汇总

我们还可以在北京快3app集中聚合列值。 PANDAS提供AGG功能,使用我们可以执行聚合函数。考虑如下所示的示例:

import pandas as pd

tmdbDataSet_dateIndex = pd.read_csv('./Cleaning Data/tmdb_5000_movies.csv', 
                                    parse_dates=True, index_col='release_date')

# Popularity of movie depends on vote_average, revenue - budget, popularity
tmdbDataSet_date_index['profit'] = tmdbDataSet_date_index['revenue'
                                                         ] - tmdbDataSet_date_index['budget']
tmdbDataSet_date_index_grouped = tmdbDataSet_date_index.groupby('title')
tmdbDataSet_date_index_grouped_sub = tmdbDataSet_date_index_grouped[['vote_average',
                                                                     'profit', 'popularity']]

# Max and min value in columns
agg_results = tmdbDataSet_date_index_grouped_sub.agg(['max', 'min'])
print(agg_results)

# Observation
# The result depicts max and min value of each movie title
# Also you might have noticed min and max values are same.
# This is because each movie title has only one row in dataset
# Can you claim which movie is most popular and profitable?

基于字典对象的聚合

使用AGG函数,我们还可以基于Dictionary对象汇总我们的结果。这意味着我们可以在北京快3app集中具有不同列的不同聚合度量。让我们看看一个例子:

import pandas as pd

tmdbDataSet = pd.read_csv('tmdb_5000_movies.csv')

# Extract year of release_date and set release_date column as index
tmdbDataSet_agg = tmdbDataSet.copy()
tmdbDataSet_agg['year'] = pd.to_datetime(tmdbDataSet_agg['release_date']).dt.year
tmdbDataSet_agg['year']= tmdbDataSet_agg['year'].fillna(0.0).astype(int)
tmdbDataSet_agg.set_index('release_date', inplace=True)
tmdbDataSet_agg['profit'] = tmdbDataSet_agg['revenue'
                                                         ] - tmdbDataSet_agg['budget']

def countMovies(series):
    return series.count()
aggObject = {'profit':'sum', 'title': countMovies }
tmdbDataSet_grouped = tmdbDataSet_agg.groupby(['year']).agg(aggObject)

# Observations
# Here we are trying to calculate no of movies released in a year
# Year which has the most profit
# Do you know in which year most of movies are released?

让我们绘制图表,看看电影预算的趋势,一年多的释放。

# Cleaning up the data
tmdbDataSet_grouped = tmdbDataSet_grouped.drop([0], axis='rows')

# Adding a new column as same as index column to plot scatter chart
tmdbDataSet_grouped['y'] = list(tmdbDataSet_grouped.index)

# Plotting scatter chart
tmdbDataSet_grouped.plot(kind='scatter', y='y', x='profit', s=tmdbDataSet_grouped.title)


#Observations
# Do you see any trend in profit and release count over an year?
# Do share your observations in comment section

在上面的帖子中,我们在来自Kaggle的示例北京快3app集的帮助下广泛探索了Pandas Python包。我会建议您探索我们在评论部分中使用的北京快3app集的北京快3app集,并在评论部分中分享您的意见。

还为您的练习,我分享了我的 jupyter笔记本 链接您可以在哪里引用和跟随帖子。

快乐学习!

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个北京快3app科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。