第二章:25+ Python 数据操作教程(第五节在 PYTHON 中创建虚拟数据)

194 阅读3分钟

 本文介绍了在 Python 中创建虚拟或随机数据以供练习的各种方法。与 R 一样,我们可以使用 pandas 和 numpy 包创建虚拟数据框。大多数分析师在 MS Excel 中准备数据。后来他们将其导入 Python 以磨练他们在 Python 中的数据整理技能。这不是一种有效的方法。有效的方法是在 Python 中准备随机数据,稍后将其用于数据操作。

目录

1. 在编辑器窗口中手动输入数据

2.从剪贴板读取数据

3. 像SAS一样将数据输入Python

4. 使用数字和字符值序列准备数据

5.生成随机数据

6. 创建分类变量

7. 导入 CSV 或 Excel 文件



1. 在编辑器窗口中手动输入数据

第一步是加载 pandas 包和使用DataFrame 函数

import pandas as pd
data = pd.DataFrame({"A" : ["John","Deep","Julia","Kate","Sandy"], 
                     "MonthSales" : [25,30,35,40,45]})
       A  MonthSales
0   John          25
1   Deep          30
2  Julia          35
3   Kate          40
4  Sandy          45

注意: 字符值应在单引号或双引号中定义。

如果您注意到 pandas 数据框的语法,列和行值是在字典中定义的。如果你理解字典的概念,你就不需要搞砸在哪里添加{ }[ ]

Dataframe 的语法:pd.DataFrame(dictionary)

d = {"A" : ["John","Deep","Julia","Kate","Sandy"], 
                     "MonthSales" : [25,30,35,40,45]}
pd.DataFrame(d)

 

2.从剪贴板读取数据

一般来说,MS Excel 是分析师最喜欢的报告工具,尤其是在创建虚拟数据时。人们通常更喜欢在 Excel 中输入数据并将其粘贴到 Python 以创建数据框。在 pandas 中,有一个选项可以使用pandas 包中的read_clipboard()函数从剪贴板导入数据(即复制的数据)。

import pandas as pd
df = pd.read_clipboard()
   Name  Score Section
0     W     26       A
1     M     62       A
2     Q     69       A
3     Y     86       A
4     J     16       B
5     A     83       B
6     O     53       D
7     C     35       D
8     S     68       D
9     P     98       D
10    Q     42       E

 

3. 像SAS一样将数据输入Python

与 SAS 类似,我们可以在编辑器窗口中输入带有定界符或分隔符的数据。我们可以使用任何分隔符——逗号、空格、制表符等。

import pandas as pd
from pandas.compat import StringIO

text = """
Name,Score,Section
W,26,A
M,62,A
Q,69,A
"""
df =pd.read_csv(StringIO(text))
import pandas as pd
from pandas.compat import StringIO

text = """
Name Score Section
W 26 A
M 62 A
Q 69 A
"""

df =pd.read_csv(StringIO(text), sep="\s+")

\s+表示读取数据时用一个或多个空格作为分隔符。

4. 使用数字和字符值序列准备数据

让我们为此任务导入两个流行的 python 包——string 和 numpy。包字符串用于生成一系列字母表。而 numpy 包用于生成按特定值递增的数字序列。

import pandas as pd
import string
import numpy as np
data2 = pd.DataFrame({"A": np.arange(1,10,2),
                     "B" : list(string.ascii_lowercase)[0:5],
                     })
   A  B
0  1  a
1  3  b
2  5  c
3  7  d
4  9  e

说明
1.np.arange(1,10,2)告诉 python 生成 1 到 10 之间的值,递增 2。
2.string.ascii_lowercase返回 abcdefghijklmnopqrstuvwxyz。list(string.ascii_lowercase)[0:5] 用于选择前 5 个字母。

5.生成随机数据

在 numpy 中,有很多函数可以生成随机值。两个最流行的随机函数是random.randint( )random.normal( )

import pandas as pd
import numpy as np
np.random.seed(1)
data3 = pd.DataFrame({"C" : np.random.randint(low=1, high=100, size=10),
                     "D"  : np.random.normal(0.0, 1.0, size=10)
                     })
    C         D
0  38 -0.528172
1  13 -1.072969
2  73  0.865408
3  10 -2.301539
4  76  1.744812
5   6 -0.761207
6  80  0.319039
7  65 -0.249370
8  17  1.462108
9   2 -2.060141

解释
np.random.seed(1)告诉 python 在下次运行时用这个种子生成相同的随机值。 np.random.randint(low=1, high=100, size=10)返回 1 到 100 之间的 10 个随机值。np.random.normal(0.0, 1.0, size=10)返回 10 个遵循标准正态分布的随机值,均值为0标准差为 1

检查正态分布的均值和标准差

np.round(np.std(np.random.normal(0.0, 1.0, size=1000)))
np.round(np.mean(np.random.normal(0.0,1.0, size=1000)))

Generate more than 1 random variable with a single function
np.random.randn(6, 4)告诉Python从4列的“标准正态分布”中生成6个随机值

np.random.seed(12)
df = pd.DataFrame(np.random.randn(6, 4),
   index=list('abcdef'), columns=list('ABCD'))
          A         B         C         D
a  0.472986 -0.681426  0.242439 -1.700736
b  0.753143 -1.534721  0.005127 -0.120228
c -0.806982  2.871819 -0.597823  0.472457
d  1.095956 -1.215169  1.342356 -0.122150
e  1.012515 -0.913869 -1.029530  1.209796
f  0.501872  0.138846  0.640761  0.527333

 

6. 创建分类变量

在此步骤中,我们将创建两种类型的分类变量:

  • 类别范围从 1 到 4
  • 二进制变量 (0 / 1)
import pandas as pd
import numpy as np
np.random.seed(1)
data4 =pd.DataFrame({"X"  : np.random.choice(range(1,5), 20, replace=True),
                     "X1" : np.where(np.random.normal(0.0, 1.0, size=20)<=0,0,1)})
    X  X1
0   2   1
1   4   0
2   1   1
3   1   0
4   4   1
5   2   0
6   4   0
7   2   0
8   4   1
9   1   0
10  1   0
11  2   0
12  1   1
13  4   1
14  2   0
15  1   1
16  3   1
17  2   1
18  3   1
19  1   0

解释

  1. np.random.choice(range(1,5), 20, replace=True) 表示生成1到4(不包括5)的20个值并替换(即重复值)。
  2. np.where(np.random.normal(size=20)<=0,0,1) 意味着如果随机值是零或负,则将其设为 0。否则为1。np.where( ) 用于构造 IF- Python 中的 ELSE 语句。

与 R 的 factor() 函数一样,您可以将变量定义为分类变量。请参阅下面的代码。

data4.X  = data4.X.astype("category")
data4.X1 = data4.X1.astype("category")

7. 导入 CSV 或 Excel 文件

使用 pandas 函数read_csv( )read_excel( ) 函数,您可以将数据从 excel 或 CSV 读取到 Python。

import pandas as pd
mydata= pd.read_csv("C:\Users\Deepanshu\samplefile.csv")
mydata = pd.read_excel("C:\Users\Deepanshu\samplefile.xlsx")