我正在连接两个数据帧,所以我希望一个数据帧位于另一个数据帧。但首先我对初始数据框做了一些转换:
scaler = MinMaxScaler()
real_data = pd.DataFrame(scaler.fit_transform(df[real_columns]), columns = real_columns)
Run Code Online (Sandbox Code Playgroud)
然后连接:
categorial_data = pd.get_dummies(df[categor_columns], prefix_sep= '__')
train = pd.concat([real_data, categorial_data], axis=1, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但行数增加了:
print(df.shape, real_data.shape, categorial_data.shape, train.shape)
(1700645, 23) (1700645, 16) (1700645, 130) (1703915, 146)
Run Code Online (Sandbox Code Playgroud)
发生了什么以及如何解决问题?
如您所见,train 的列数等于 real_data 和 categorial_data 列的总和
使用compose()合并两个图形后尝试写入GML文件时,出现以下错误消息:
NetworkXError: 'user_id' is not a valid key
Run Code Online (Sandbox Code Playgroud)
背景是我使用以下命令导入了两个GML文件:
g = nx.read_gml(file_path + "test_graph_1.gml")
h = nx.read_gml(file_path + "test_graph_2.gml")
Run Code Online (Sandbox Code Playgroud)
每个节点(在两个GML文件中)文件的结构如下:
node [
id 9
user_id "1663413990"
file "wingsscotland.dat"
label "brian_bilston"
image "/Users/ian/development/gtf/gtf/img/1663413990.jpg"
type "friends"
statuses 21085
friends 737
followers 53425
listed 550
ffr 72.4898
lfr 0.1029
shape "triangle-up"
]
Run Code Online (Sandbox Code Playgroud)
导入每个文件之后,我可以检查所有节点属性,看看每个图中的节点都是唯一的。
我还看到默认情况下NetworkX会丢弃'id'字段,而und使用'label'作为节点的标识符。它保留了user_id属性(恰好是Twitter的user_id,非常适合我的目的)。
跑步
list(f.nodes(data=True))
Run Code Online (Sandbox Code Playgroud)
我可以看到上面节点的数据是:
('brian_bilston',
{'ffr': 72.4898,
'file': 'wingsscotland.dat',
'followers': 53425,
'friends': 737,
'image': '/Users/ian/development/gtf/gtf/img/1663413990.jpg',
'lfr': 0.1029,
'listed': 550,
'shape': 'triangle-up',
'statuses': 21085,
'type': 'friends',
'user_id': '1663413990'})
Run Code Online (Sandbox Code Playgroud)
在此测试用例中,有一个公共节点由图g和图h共享,即上面显示的一个。其他所有用户名和标签均唯一。
然后,我使用以下方法合并两个图:
f …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将多个CSV文件读取到Pandas数据框中。CSV不会以逗号分隔-字段以分号“;”分隔。
我的代码基于此处的答案。
我的数据全部在一个特定的子目录中: /data/luftdaten/5331
这是我运行的:
import glob
import pandas as pd
path =r'data/luftdaten/5331' # use your path
filenames = glob.glob(path + "/*.csv")
count_files = 0
dfs = []
for filename in filenames:
if count_files ==0:
dfs.append(pd.read_csv(filename, sep=";"))
count_files += 1
else:
dfs.append(pd.read_csv(filename, sep=";", skiprows=[0]))
count_files +=1
big_frame = pd.concat(dfs, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我count_files
用来监视它是否是第一个CSV-在这种情况下,我将导入标头。否则,它会跳过标题。
该代码执行确定。
如果我使用该目录中的单个文件运行它,那么一切都很好:
big_frame.info()
Run Code Online (Sandbox Code Playgroud)
输出:
RangeIndex:146个条目,0到145 数据列(**总共12列** s): sensor_id 146非空int64 sensor_type 146非空对象 等等......
如果我在目录中有2个或更多文件来运行它,那么从一开始就会出错。
输出4个文件:
范围索引:1893个条目,0到1892 数据列(总计** 33列**): -2.077 1164非空float64 -2.130 145非空float64 2.40 145非空float64
big_frame.head()
在单个CSV版本上运行可以提供正确的列名: …