版权声明:本文为博主原创文章,欢迎讨论共同进步。 https://blog.csdn.net/tz_zs/article/details/81355537
____tz_zs
pandas.DataFrame.rename
更改行名列名。传入的函数或字典值必须是1对1的,没有包含在字典或者Series中的标签将保持原来的名称。字典中包含df中没有的标签,不会报错。
DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)
参数:
mapper, index, columns : 映射的规则。
axis:指定轴,可以是轴名称('index','columns')或数字(0,1),默认为index。
copy:布尔值,默认为True,复制底层数据。
inplace:布尔值,默认为False。指定是否返回新的DataFrame。如果为True,则在原df上修改,返回值为None。
level:int或level name,默认为None。如果是MultiIndex,只重命名指定级别的标签。
返回值:
DataFrame
两种修改的方法:
- (index=index_mapper, columns=columns_mapper, ...)
- (mapper, axis={'index', 'columns'}, ...)
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
@author: tz_zs
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
list_l = [[1, 3, 3, 5, 4], [11, 7, 15, 13, 9], [4, 2, 7, 9, 3], [15, 11, 12, 6, 11]]
index = ["2018-07-01", "2018-07-02", "2018-07-03", "2018-07-04"]
df = pd.DataFrame(list_l, index=index, columns=['a', 'b', 'c', 'd', 'e'])
print(df)
"""
a b c d e
2018-07-01 1 3 3 5 4
2018-07-02 11 7 15 13 9
2018-07-03 4 2 7 9 3
2018-07-04 15 11 12 6 11
"""
# 第一种修改方法
df_rename = df.rename({'a': 'rename_a', 'b': 'rename_b', 'c': 'rename_c', 'd': 'rename_d', 'e': 'rename_e'},
axis='columns')
print(df_rename)
"""
rename_a rename_b rename_c rename_d rename_e
2018-07-01 1 3 3 5 4
2018-07-02 11 7 15 13 9
2018-07-03 4 2 7 9 3
2018-07-04 15 11 12 6 11
"""
# 第二种修改方法
df_rename = df.rename(index={"2018-07-01": 71, "2018-07-02": 72, "2018-07-03": 73, "2018-07-04": 74},
columns={'a': 'rename_a', 'b': 'rename_b', 'c': 'rename_c', 'd': 'rename_d', 'e': 'rename_e'})
print(df_rename)
"""
rename_a rename_b rename_c rename_d rename_e
71 1 3 3 5 4
72 11 7 15 13 9
73 4 2 7 9 3
74 15 11 12 6 11
"""
.
当 inplace=True 时,返回值为 None,函数会在原df上进行修改。
# 当 inplace=True 时,返回值为None,函数会在原df上修改。
df_rename = df.rename(index={"2018-07-01": 71, "2018-07-02": 72, "2018-07-03": 73, "2018-07-04": 74},
columns={'a': 'rename_a', 'b': 'rename_b', 'c': 'rename_c', 'd': 'rename_d', 'e': 'rename_e'},
inplace=True)
print(df)
"""
rename_a rename_b rename_c rename_d rename_e
71 1 3 3 5 4
72 11 7 15 13 9
73 4 2 7 9 3
74 15 11 12 6 11
"""
print(df_rename)
"""
None
"""
.
pandas.DataFrame.reindex
重建索引,对于索引没有对应值的,使用 NaN 或者指定的值填充。
DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None,
copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
.
参数:
method : 用于填充重建索引的 DataFrame 中的缺失值的方法。(请注意:仅适用于具有单调递增/递减 index 的 DataFrames / Series。)
- 默认:不填充
- pad / ffill: 使用上一个有效观察填充
- backfill / bfill: 使用下一个有效的观察值填充
- nearest: 使用最靠近的有效值来填充空白
copy : 布尔值,默认为 True,返回的是一个新的 df 对象(而不是在原对象上修改)。
fill_value : 标量,默认为 np.NaN,可以是任意的值。用于填充缺失的值。
返回 :
重建索引新 DataFrame 对象。
DataFrame.reindex 支持两种方法:
- (index=index_labels, columns=column_labels, ...)
- (labels, axis={'index', 'columns'}, ...)
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
@author: tz_zs
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
list_l = [[1, 3, 3, 5, 4.], [11, 7, 15, 13, 9.1], [4, 2, 7, 9, 3.5], [15, 11, 12, 6, 11.1]]
index = ["2018-07-01", "2018-07-02", "2018-07-03", "2018-07-04"]
df = pd.DataFrame(list_l, index=index, columns=['a', 'b', 'c', 'd', 'e'])
print(df)
"""
a b c d e
2018-07-01 1 3 3 5 4.0
2018-07-02 11 7 15 13 9.1
2018-07-03 4 2 7 9 3.5
2018-07-04 15 11 12 6 11.1
"""
# index
new_index = ["2018-07-04", "2018-07-05", "2018-07-06"]
df_reindex = df.reindex(index=new_index)
df_reindex2 = df.reindex(labels=new_index, axis="index")
print(df_reindex)
print(df_reindex2)
"""
a b c d e
2018-07-04 15.0 11.0 12.0 6.0 11.1
2018-07-05 NaN NaN NaN NaN NaN
2018-07-06 NaN NaN NaN NaN NaN
"""
# columns
new_columns = ["c", "d", "e", "f"]
df_re = df.reindex(columns=new_columns)
df_re2 = df.reindex(labels=new_columns, axis="columns")
print(df_re)
print(df_re2)
"""
c d e f
2018-07-01 3 5 4.0 NaN
2018-07-02 15 13 9.1 NaN
2018-07-03 7 9 3.5 NaN
2018-07-04 12 6 11.1 NaN
"""
.
end