<jupyter_start><jupyter_text>阅读笔记** 作者：方跃文 **** Email: <EMAIL> **** 时间：始于2018年11月17日， 结束写作于 2018年 第七章 数据规整化：清理、转换、合并、重塑PANDAS 的产生是以运用为导向的，因此它包含了许多实际工作中需要的数据清理方式。 合并数据集pandas对象可以通过一些内置的方法进行合并：- pandas.merge, 可以根据一个或者多个key将数据进行连接- pandas.concat ， 可以沿着一条轴将多个数据堆叠在一起。- 实例方法中的 combine.fist 可以将重复的数据编排在一起，并且用一个对象中的值填缺另一个对象中的缺失值。 数据库风格的DataFrame合并 (database-style DataFrame joins)Pands 中的merge，允许我们根据一个或者多个keys来合并datasets，这种操作实现类似于基于SQL数据中的 join 方法。<jupyter_code>import pandas as pd

def special_sign(sign, times):
    # sign is string, times is integer
    str_list = sign*times
    new_str = ''.join([i for i in str_list])
    return(new_str)

df1 = pd.DataFrame({'key':list('bbacaab'),
                   'data1': range(7)})
df2 = pd.DataFrame({'key': list('abd'),
                   'data2': range(3)})
print(df1)
print(special_sign('#',15))
print(df2)

## many-to-one join; without specifying which column to join on
pd.merge(df1, df2) 
## many-to-one join; wit specifying which column to join on
pd.merge(df1, df2, on = 'key')<jupyter_output><empty_output><jupyter_text>轴向连接DataFrame 中有很丰富的merge方法，此外还有一种数据合并运算被称作连接（concatenation）、binding、stacking。在Numpy中，也有concatenation函数。<jupyter_code>import numpy as np

arr1 = np.arange(12).reshape(3,4)
print(arr1)
np.concatenate([arr1, arr1], axis=1)<jupyter_output><empty_output><jupyter_text>对于pandas对象，带有标签的轴使我们能够进一步推广数组的连接运算。pandas中的concate函数提供了一些功能，来操作这种合并运算 下方这个例子中，有三个series，这三个series的索引没有重叠，我们来看看，concate是如何给出合并运算的。<jupyter_code>import pandas as pd
seri1 = pd.Series([-1,2], index=list('ab'))
seri2 = pd.Series([2,3,4], index=list('cde'))
seri3 = pd.Series([5,6], index=list('fg'))
print(seri1)
print(seri2)
print(seri3)
print(seri1)
pd.concat([seri1,seri2,seri3])<jupyter_output><empty_output><jupyter_text>By default，concat是在axis=0上工作的，最终产生一个全新的Series。如果传入axis=1，那么结果就会成为一个 DataFrame （axis=1 是列）<jupyter_code>pd.concat([seri1, seri2, seri3],axis=1, sort=False)
pd.concat([seri1, seri2, seri3],axis=1, sort=False,join='inner') # 传入 inner，得到并集，该处并集为none
seri4 = pd.concat([seri1*5, seri3])
print(seri4)
seri4 = pd.concat([seri1*5, seri3],axis=1, join='inner')
print(seri4)<jupyter_output>Empty DataFrame
Columns: [0, 1]
Index: []<jupyter_text>Appendix during writing this note  define a function which returns a string with repeated letters<jupyter_code># Ref: https://stackoverflow.com/questions/38273353/how-to-repeat-individual-characters-in-strings-in-python
def special_sign(sign, times):
    # sign is string, times is integer
    str_list = sign*times
    new_str = ''.join([i for i in str_list])
    return(new_str)

print(special_sign('*',20))<jupyter_output>********************
{'fraction_non_alphanumeric': 0.14876660341555978, 'fraction_numerical': 0.03263757115749526, 'mean_word_length': 7.3949044585987265, 'pattern_counts': {'":': 0, '<': 20, '<?xml version=': 0, '>': 20, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '202347', 'license': 'Apache-2.0', 'n_tokens_mistral': 1296, 'n_tokens_neox': 1314, 'n_words': 173, 'path': 'machine-learning/McKinney-pythonbook2013/chapter07-note.ipynb', 'repo_name': 'yw-fang/MLreadingnotes', 'size': '2645'}