Problem with concatenating two dataframes
Mahmood Naderan
nt_mahmood at yahoo.com
Sat Nov 6 12:16:15 EDT 2021
In the following code, I am trying to create some key-value pairs in a dictionary where the first element is a name and the second element is a dataframe.
# Creating a dictionary
data = {'Value':[0,0,0]}
kernel_df = pd.DataFrame(data, index=['M1','M2','M3'])
dict = {'dummy':kernel_df}
# dummy -> Value
# M1 0
# M2 0
# M3 0
Then I read a file and create some batches and compare the name in the batch with the stored names in dictionary. If it doesn't exist, a new key-value (name and dataframe) is created. Otherwise, the Value column is appended to the existing dataframe.
df = pd.read_csv('test.batch.csv')
print(df)
for i in range(0, len(df), 3):
print("\n------BATCH BEGIN")
batch_df = df.iloc[i:i+3]
name = batch_df.loc[i].at["Name"]
values = batch_df.loc[:,["Value"]]
print(name)
print(values)
print("------BATCH END")
if name in dict:
# Append values to the existing key
dict[name] = pd.concat( dict[name],values ) #### ERROR
else:
# Create a new pair in dictionary
dict[name] = values;
As you can see in the output, the join statement has error.
ID Name Metric Value
0 0 K1 M1 10
1 0 K1 M2 5
2 0 K1 M3 10
3 1 K2 M1 20
4 1 K2 M2 10
5 1 K2 M3 15
6 2 K1 M1 2
7 2 K1 M2 2
8 2 K1 M3 2
------BATCH BEGIN
K1
Value
0 10
1 5
2 10
------BATCH END
------BATCH BEGIN
K2
Value
3 20
4 10
5 15
------BATCH END
------BATCH BEGIN
K1
Value
6 2
7 2
8 2
------BATCH END
As it reaches the contact() statement, I get this error:
TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"
Based on the definition I wrote in the beginning of the code, "dict[name]" should be a dataframe. Isn't that?
How can I fix that?
Regards,
Mahmood
More information about the Python-list
mailing list