在CSV中匹配单元格以返回计算

2024-10-02 02:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个程序,将采取最新的30个CSV文件中的数据文件夹,并计算某些列的总数。共有4列数据,第一列是标识符,其余的是与标识符相关的数据。举个例子:

文件1

Asset     X      Y      Z
12345    250    100    150
23456    225    150    200
34567    300    175    225

文件2

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非常陌生,所以任何方向都是受欢迎的。谢谢您!你知道吗


Tags: 文件csv数据csvfilefiles标识符assetusers
2条回答

我想您需要为您的listData的代码pandas.concat添加

所以它会变成:

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_dataDataFrame一起使用,例如:concatenated_data['A'].max()concatenated_data['A'].count()、`groupby`等

我可能还会在读取数据时将资产编号设置为索引,因为这有助于筛选数据。所以呢

rd = pd.read_csv(files, index_col=0)

然后你可以按照alexyu的建议去做,当你使用完之后,从一个特定的资产编号中挑选出所有的数据

asset_data = rd.loc[asset_number, column_name]

如果只需要特定的输入,则通常需要在将数据帧附加到列表之前格式化数据帧中的数据。具体怎么做自然取决于你想要什么,也就是说,你执行什么样的计算。你知道吗

如果您想要一个只返回一个特定资产的所有数据的函数,您可以按照

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定义之外,但请记住,返回的所有内容都存储为字符串。你知道吗

相关问题 更多 >

    热门问题