我正在尝试创建一个程序,该程序将使用文件夹中数据的最新30个CSV文件并计算某些列的总数。有4列数据,第一列是标识符,其余列是与标识符相关的数据。这是一个示例:
file1
Asset X Y Z
12345 250 100 150
23456 225 150 200
34567 300 175 225
file2
Asset X Y Z
12345 270 130 100
23456 235 190 270
34567 390 115 265
我希望能够匹配两个CSV中的资产编号以返回每个列的值,然后对每个列执行计算。一旦完成这些计算,我也打算将各种数据绘制成图形。到目前为止,我唯一能完成的就是使用以下代码从CSV文件中提取所有数据:
csvfile = glob.glob('C:\\Users\\tdjones\\Desktop\\Python Work Files\\FDR*.csv')
listData = []
for files in csvfile:
df = pd.read_csv(files, index_col=0)
listData.append(df)
concatenated_data = pd.concat(listData, sort=False)
group = concatenated_data.groupby('ASSET')['Slip Expense ($)', 'Net Win ($)'].sum()
group.to_csv("C:\\Users\\tdjones\\Desktop\\Python Work Files\\Test\\NewFDRConcat.csv", header=('Slip Expense', 'Net WIn'))
我对Python非常陌生,因此欢迎任何方向。谢谢!
答案 0 :(得分:1)
在读取数据时,我可能还会将资产编号设置为索引,因为这可以帮助筛选数据。所以
rd = pd.read_csv(files, index_col=0)
然后,您可以按照Alex Yu的建议进行操作,并在完成使用
后从特定资产编号中选择所有数据。asset_data = rd.loc[asset_number, column_name]
如果只需要特定的输入,通常需要先格式化DataFrame中的数据,然后再将其追加到列表中。确切地该怎么做自然自然取决于您想要什么,即您执行哪种计算。
如果您想要一个仅返回一项特定资产的所有数据的函数,则可以按照
def get_asset(asset_number):
csvfile = glob.glob('C:\\Users\\tdjones\\Desktop\\Python Work Files\\*.csv')
asset_data = []
for file in csvfile:
data = [line for line in open(file, 'r').read().splitlines()
if line.split(',')[0] == str(asset_num)]
for line in data:
asset_data.append(line.split(','))
return pd.DataFrame(asset_data, columns=['Asset', 'X', 'Y', 'Z'], dtype=float)
尽管上述效果如何取决于您要浏览的数据集的大小。类似于上述方法的东西需要搜索每一行并在每一行上执行几个高级功能,因此如果每个文件中都有数百万行数据,则可能会出现问题。
此外,以上假设所有数据元素都是数字字符串(因此可以转换为整数或浮点数)。如果不是这种情况,请将dtype参数保留在DataFrame定义之外,但请记住,然后将返回的所有内容存储为字符串。
答案 1 :(得分:0)
我想您需要为Cid
中的代码pandas.concat添加
因此它将变为:
null
之后,您可以对此listData
csvfile = glob.glob('C:\\Users\\tdjones\\Desktop\\Python Work Files\\*.csv')
listData = []
for files in csvfile:
rd = pd.read_csv(files)
listData.append(rd)
concatenated_data = pd.concat(listData)
使用聚合函数,例如:concatenated_data
,DataFrame
,'groupby`s等。