Skip to content

pandas-数据读写

数据读写

支持的数据格式

  • 文本: CSVHTMLJSON
  • 二进制:ExcelPickleHDF5

读写Excel文件

python
# 读取Excel文件
path = '/csv-o49916.xlsx'
df = pd.read_excel(path, sheet_name='Sheet1', header=[0])
df2 = df[(df['命中次数'] >= 9) & (df['城市'] == '淄博')]
print(df2)

# 写入Excel文件
df2.to_excel('tmp.xls', index=None)

读写csv文件

python
# 读取csv文件
path = '/aa.csv'
df = pd.read_csv(path, sep=',', skiprows=0, skipfooter=0)
# print(df)
df2 = df[(df['times'] >= 10)][['times', 'url', 'phone', 'o_province']]
print(df2)

# 写入csv文件
df2.to_csv('tmp.csv', sep=';', header=False, index=False, encoding='utf-8')

数据操作

算数运算

两个Series运算

python
print('Series操作>>>>')
s1 = pd.Series([8, 7, 3], index=list('abc'))
s2 = pd.Series([3, 5, 8], index=list('abc'))
s3 = pd.Series([4, 2, 7], index=list('bcd'))
print(s1)
print(s2)
print(s1 + s2)
s = s1 + s3
print(s.fillna(0))  # 填充NaN

# 使用运算方法
print(s1.add(s3))
print(s1.mul(s2))

DataFrame运算

python
print('DataFrame操作>>>>')
df1 = pd.DataFrame({
  'apples': [3, 2, 0, 1],
  'oranges': [0, 1, 2, 3]
}, index=['June', 'Robert', 'Lily', 'David'])
print(df1)
df2 = pd.DataFrame({
  'apples': [2, 2, 1],
  'oranges': [1, 1, 3],
  'bananas': [1, 2, 1]
}, index=['June', 'Robert', 'Lily'])
print(df2)
print(df1 + df2)
print((df1 + df2).fillna(0.0))

描述性统计方法

函数应用

python
def func1(x):
    return x * 100


def main():
    print('>>>>>>>')
    s1 = pd.Series([8, 7, 3], index=list('abc'))
    print(s1)
    print(s1.apply(func1))
    print(s1)
  
		print('<<<<<<<<')
    df1 = pd.DataFrame({
        'apples': [1, 2, 3, 4],
        'oranges': [5, 6, 7, 8]
    })
    print(df1)
    print(df1.apply(func1))  # 作用在每一列上面
    print(df1.apply(func1, axis=1))  # 作用在每一行上面
    print(df1)
    print(df1.apply(lambda x: x * 10))  # lambda表达式
    print(df1.apply(lambda s: s.max() - s.min()))  # DF传递的是一个列
    print(df1.apply(lambda s: s.max() - s.min(), axis=1))  # DF传递的是一个列
    
    print(df1.applymap(lambda x: x * 9))    # 仅适用于DataFrame的每一个元素
    print(s1.map(lambda x: x * 9))    # 仅适用于Series的每一个元素

排序

python
print('>>>: 排序')
print(s1.sort_index())  # 根据索引排序
print(s1.sort_index(ascending=False))

print(s1.sort_values(ascending=True))  # 根据值进行排序
print(s1.sort_values(ascending=False))

print(df1.sort_index())
print(df1.sort_index(ascending=False))
print(df1.sort_index(ascending=False, axis=1))

print(df1.sort_values(['oranges'], ascending=False))  # 指定排序列

绘制图表

python
# 数据来源:https://q.stock.sohu.com/cn/600519/lshq.shtml

print('数据可视化: Matplotlib')
df1 = pd.read_csv('maotai.txt', sep=' ')
df1 = df1.sort_values(['日期'], ascending=True)
plt.rc('font', family='Alibaba PuHuiTi', size=14)  # 解决中文显示问题
t = df1.plot(x='日期', y='成交量(手)')
# t = df1.plot(x='日期', y='成交量(手)', figsize=(16, 6)) # 设置行和列的宽度
plt.show()  # 显示
print(type(t))
# <class 'matplotlib.axes._subplots.AxesSubplot'>

人生感悟