Python 2.7 排序程序:按列排序文件数据

需积分: 9 0 下载量 43 浏览量 更新于2024-11-11 收藏 3KB ZIP 举报
资源摘要信息: "Sort_By_Columns: Python 2" 在本节内容中,我们将深入探讨一个Python 2.7程序“Sort_By_Columns”,该程序的功能是根据指定列的顺序对输入文件进行排序。通过这个程序,用户可以指定一个输入文件以及一个或多个列名作为排序依据。程序会根据提供的列名,按照升序的方式对文件中的记录进行排序。如果指定了多个列名,那么排序将首先按照第一个列名的顺序进行,若存在相同的值,则会根据第二个列名继续排序,以此类推。 该程序的核心功能涵盖了几个关键知识点: 1. 使用Python的内置模块`csv`中的`DictReader`和`DictWriter`来处理输入输出文件。 2. 对于输入文件的处理,`DictReader`可以将制表符分隔的文件内容读入到一个字典列表中,每个字典代表文件中的一行,并且字典的键是列标题,值是对应的列内容。 3. 对字典列表进行排序,Python提供了`sorted`函数,可以对列表中的元素进行排序。排序时需要指定一个排序键(key),该键是一个函数,它决定了排序的依据。在这个程序中,排序键会根据指定的列名来排序字典列表。 4. 最后,使用`DictWriter`将排序后的字典列表写入到输出文件中。`DictWriter`可以将字典列表写入到CSV文件中,并且可以指定列标题。 下面将详细展开每个关键知识点: 1. **读取文件:** - 使用`csv.DictReader`读取文件,假设输入文件为`testfile.txt`,并且文件是使用制表符作为分隔符,那么可以通过如下方式读取文件: ```python import csv with open('testfile.txt', 'rb') as csv*** ***'\t') data = list(reader) ``` - 这段代码会将`testfile.txt`中的每一行读取为一个字典,字典的键是列标题,值是对应的数据。 2. **排序字典列表:** - 排序功能可以通过`sorted()`函数实现,例如: ```python sorted_data = sorted(data, key=lambda row: (row['Gender'], row['Name'])) ``` - 这里,`sorted()`函数的`key`参数是一个lambda函数,它返回一个元组,包含了按优先级排序的多个列值。`sorted()`将首先根据性别`Gender`进行排序,然后在性别相同的情况下根据姓名`Name`进行排序。 3. **写入排序后的数据到文件:** - 通过`csv.DictWriter`将排序后的数据写入到新的输出文件中: ```python with open('sortedfile.txt', 'wb') as csv*** ***[0].keys() writer = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter='\t') writer.writeheader() writer.writerows(sorted_data) ``` - 这段代码会创建一个新的CSV文件`sortedfile.txt`,并使用之前读取的列标题作为字段名。`writeheader()`方法会写入列标题,`writerows()`方法会写入排序后的行数据。 4. **程序运行示例:** - 假设运行命令为: ``` > python SortByColumns.py testfile.txt Gender Name ``` - 程序将会读取`testfile.txt`文件,以`Gender`和`Name`作为排序的两个关键列,然后输出排序后的数据到新的文件中。 通过这个程序,我们可以看到Python在文件处理方面的灵活性和高效性,特别是在数据处理和排序方面,Python提供了强大的内置模块和简洁的语法结构,使得开发者可以轻松完成复杂的任务。 通过上述的描述和示例,我们了解到在使用Python 2.7进行文件的排序操作时,可以利用`csv`模块的`DictReader`和`DictWriter`类来简化读取和写入CSV文件的过程。同时,使用`sorted()`函数和lambda表达式可以灵活地定义排序逻辑。对于使用制表符作为分隔符的文件,只需要在打开文件时设置正确的分隔符参数即可。这些知识点对于初学者来说非常实用,可以帮助他们在数据处理和分析方面迈出坚实的步伐。

忽略该脚本警告 import pandas as pd import glob def com(): file_paths = glob.glob('E:/py卓望/数据分析/top150_20230321/*.txt') data = pd.DataFrame() for i in file_paths: df = pd.read_csv(i, sep=',', header=None, skiprows=[0]) data = pd.concat([data, df]) data.drop(df.columns[0], axis=1, inplace=True) df.sort_values(by=1, ascending=False, inplace=True) data.iloc[:, 0] = data.iloc[:, 0].str.lower() data.to_csv('E:/py卓望/数据分析/all/all_file.txt', sep=',', index=False,header=False) all = pd.read_csv('E:/py卓望/数据分析/all/all_file.txt', header=None, delimiter=',') all[0] = all[0].str.split('.') all[0] = all[0].apply( lambda x: '.'.join(x[-3:]) if '.'.join(x[-2:]) in ['gov.cn', 'com.cn', 'org.cn', 'net.cn'] else '.'.join(x[-2:])) new_col = all[0] result = pd.concat([new_col,all.iloc[:,1:]],axis=1) result.to_csv('E:/py卓望/数据分析/all/二级域名.txt', sep=',',index=False,header=False) summation = pd.read_csv('E:/py卓望/数据分析/all/二级域名.txt', header=None, delimiter=',') grouped = summation.groupby(0)[1].sum().reset_index() grouped = grouped.sort_values(by=1, ascending=False).reset_index(drop=True) grouped[1] = grouped[1].fillna(summation[1]) grouped.to_csv('E:/py卓望/数据分析/all/处理后求和域名.txt', sep=',', index=False, header=False) top_10000 = pd.read_csv('E:/py卓望/数据分析/all/处理后求和域名.txt', header=None, delimiter=',') alls = top_10000.nlargest(10000, 1) alls.drop(columns=[1], inplace=True) alls.to_csv('E:/py卓望/数据分析/all/data.txt', sep=',',index=False, header=False) final = top_10000.iloc[10000:] final.drop(columns=[1], inplace=True) final.to_csv('E:/py卓望/数据分析/all/final_data.txt', sep=',',index=False, header=False) print(final.to_csv) warnings.filterwarnings("ignore") def main(): com() if __name__ == "__main__": print("开始清洗域名文件") main() print("数据清洗完毕")

2023-06-06 上传
2023-06-08 上传

import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt # 读取数据 data = pd.read_csv('D:/pythonProject/venv/BostonHousing2.csv') # 提取前13个指标的数据 X = data.iloc[:, 5:18].values # 数据标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 主成分分析 pca = PCA() X_pca = pca.fit_transform(X_scaled) # 特征值和特征向量 eigenvalues = pca.explained_variance_ eigenvectors = pca.components_.T # 碎石图 variance_explained = np.cumsum(eigenvalues / np.sum(eigenvalues)) plt.plot(range(6, 19), variance_explained, marker='o') plt.xlabel('Number of Components') plt.ylabel('Cumulative Proportion of Variance Explained') plt.title('Scree Plot') plt.show() # 选择主成分个数 n_components = np.sum(variance_explained <= 0.95) + 1 # 前2个主成分的载荷图 loadings = pd.DataFrame(eigenvectors[:, 0:2], columns=['PC1', 'PC2'], index=data.columns[0:13]) plt.figure(figsize=(10, 6)) plt.scatter(loadings['PC1'], loadings['PC2'], alpha=0.7) for i, feature in enumerate(loadings.index): plt.text(loadings['PC1'][i], loadings['PC2'][i], feature) plt.xlabel('PC1') plt.ylabel('PC2') plt.title('Loading Plot') plt.grid() plt.show() # 主成分得分图 scores = pd.DataFrame(X_pca[:, 0:n_components], columns=['PC{}'.format(i+1) for i in range(n_components)]) plt.figure(figsize=(10, 6)) plt.scatter(scores['PC1'], scores['PC2'], alpha=0.7) for i, label in enumerate(data['MEDV']): plt.text(scores['PC1'][i], scores['PC2'][i], label) plt.xlabel('PC1') plt.ylabel('PC2') plt.title('Scores Plot') plt.grid() plt.show() # 综合评估和排序 data['PC1_score'] = X_pca[:, 0] sorted_data = data.sort_values(by='PC1_score') # 主成分回归模型 from sklearn.linear_model import LinearRegression Y = data['MEDV'].values.reshape(-1, 1) X_pca_regression = X_pca[:, 0].reshape(-1, 1) regression_model = LinearRegression() regression_model.fit(X_pca_regression, Y) # 回归方程 intercept = regression_model.intercept_[0] slope = regression_model.coef_[0][0] equation = "MEDV = {:.2f} + {:.2f} * PC1".format(intercept, slope) print("Regression Equation:", equation) # 最小二乘估计结果 from statsmodels.api import OLS X_const = np.concatenate((np.ones((506, 1)), X_pca_regression), axis=1) ols_model = OLS(Y, X_const).fit() print("OLS Regression Summary:") print(ols_model.summary())

2023-06-05 上传
2023-05-27 上传